@rightfold Ich bin anderer Meinung. Die "doppelte" Frage bezieht sich auf C ++, nicht auf Java, und diese Frage wurde Jahre vor der Einführung von Lambda-Ausdrücken durch Java gestellt.
Oliver Spryn
4
@rightfold Das ist kaum garantiert. Sie oder ich könnten, aber jemand anderes, der einen harten Tag durchmacht, könnte immer noch Probleme haben, zu analysieren, was los ist. Da es sich nicht um ein genaues Duplikat handelt, wird es auf jeden Fall etwas subjektiv, und das Fehlen enger Abstimmungen scheint darauf hinzudeuten, dass die meisten Menschen möchten, dass die Frage bleibt.
Chris Hayes
Antworten:
91
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);.
(x) -> (x < -x)
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, obx
es kleiner als ist-x
, was für alle (nun ja , die meisten ) negativen Zahlen der Fall ist, daher der Nameneg
.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 verwendenIntPredicate neg = x -> (x < 0);
.quelle
Integer.MIN_VALUE
;)x <3
meine Liebe zu x zum Ausdruck kommt;)x <- 0
wenn Sie den "Reverse Lambda Operator" so sehr mögen ...