Ich bin kürzlich auf folgenden Code gestoßen:
IntPredicate neg = x -> x <- x;
Was ist das, eine Art umgekehrtes Doppel-Lambda?
Ich bin kürzlich auf folgenden Code gestoßen:
IntPredicate neg = x -> x <- x;
Was ist das, eine Art umgekehrtes Doppel-Lambda?
Antworten:
Es gibt keinen -> <-
Operator. Das erste ->
ist nur die in Java 8 eingeführte Lambda-Syntax, und das zweite <-
ist eine irreführende Verkettung von 'kleiner als' <
und 'unärem Minus' -
.
Sie können es lesen als IntPredicate neg = (x) -> (x < (-x));
, dh es wird geprüft, ob x
es kleiner als ist -x
, was für alle (nun ja , die meisten ) negativen Zahlen der Fall ist, daher der Name neg
.
IntPredicate neg = x -> x <- x;
System.out.println(neg.test(4)); // false
System.out.println(neg.test(0)); // false
System.out.println(neg.test(-4)); // true
Nur der Vollständigkeit halber: Dieser Test ist nicht nur (absichtlich?) Schwer zu verstehen, sondern schlägt - wie in den Kommentaren ausgeführt - auch fehl Integer.MIN_VALUE
(was ist ==-Integer.MIN_VALUE
). Stattdessen sollten Sie wahrscheinlich nur die viel einfachere verwenden IntPredicate neg = x -> (x < 0);
.
Integer.MIN_VALUE
;)
x <3
meine Liebe zu x zum Ausdruck kommt;)
x <- 0
wenn Sie den "Reverse Lambda Operator" so sehr mögen ...
(x) -> (x < -x)