Нещодавно я натрапив на такий код:
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)