Da dies auch für Kotlin ("kotlin negate function reference") bei Google am höchsten eingestuft ist, werde ich hier eine Antwort posten:
import kotlin.reflect.KFunction1
/**
* Kotlin-Version von [java.util.function.Predicate.negate] für funktionale Typen.
*
* Beispiel:
* ```
* val isX: X -> Boolean = ...
* val isNotX = !isX
* val isNotX = isX.not()
* ```
*/
operator fun <T> ((T) -> Boolean).not(): (T) -> Boolean =
{ !this(it) }
/**
* Kotlin-Version von [java.util.function.Predicate.negate] für Methodenreferenzen.
*
* Beispiel:
* ```
* fun isX(x: X): Boolean = ...
* val isNotX = !::isX
* ```
*/
operator fun <T> KFunction1<T, Boolean>.not(): KFunction1<T, Boolean> =
{ it: T -> !this(it) }::invoke
/**
* Kotlin-Version von [java.util.function.Predicate.or] für funktionale Typen.
*/
infix fun <T> ((T) -> Boolean).or(other: (T) -> Boolean): (T) -> Boolean =
{ this(it) || other(it) }
/**
* Kotlin-Version von [java.util.function.Predicate.or] für Methodenreferenzen.
*/
infix fun <T> KFunction1<T, Boolean>.or(other: KFunction1<T, Boolean>): KFunction1<T, Boolean> =
{ it: T -> this(it) || other(it) }::invoke
/**
* Kotlin-Version von [java.util.function.Predicate.and] für funktionale Typen.
*/
infix fun <T> ((T) -> Boolean).and(other: (T) -> Boolean): (T) -> Boolean =
{ this(it) && other(it) }
/**
* Kotlin-Version von [java.util.function.Predicate.and] für Methodenreferenzen.
*/
infix fun <T> KFunction1<T, Boolean>.and(other: KFunction1<T, Boolean>): KFunction1<T, Boolean> =
{ it: T -> this(it) && other(it) }::invoke
Ich bin mir nicht bewusst, dass diese in stdlib existieren, vielleicht gibt es sie bereits in einigen Bibliotheken. Hoffentlich hilft dies jemandem in der Zukunft, da die Syntax nicht trivial war.