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 xes 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 <3meine Liebe zu x zum Ausdruck kommt;)
x <- 0wenn Sie den "Reverse Lambda Operator" so sehr mögen ...
(x) -> (x < -x)