Нещодавно я натрапив на такий код:
IntPredicate neg = x -> x <- x;
Що це, якась зворотна подвійна лямбда?
Нещодавно я натрапив на такий код:
IntPredicate neg = x -> x <- x;
Що це, якась зворотна подвійна лямбда?
Відповіді:
-> <-Оператора немає . Перший ->- це просто лямбда-синтаксис, представлений у Java 8, а другий <-- оманливе об’єднання „менше, ніж“ <та „одинарний мінус“ -.
Ви можете прочитати це як IntPredicate neg = (x) -> (x < (-x));, тобто він перевіряє, чи xменше, ніж -x, що має місце для всіх (ну, більшість ) негативних чисел, звідси і назва 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
Тільки для повноти: Цей тест не тільки (навмисно?) Важко зрозуміти, але - як зазначено в коментарях - він також не відповідає Integer.MIN_VALUE(що є ==-Integer.MIN_VALUE). Натомість слід, мабуть, просто скористатися набагато простішим IntPredicate neg = x -> (x < 0);.
Integer.MIN_VALUE;)
x <3висловлює свою любов до х;)
x <- 0якщо вам так подобається “зворотний лямбда-оператор” ...
(x) -> (x < -x)