Ответ 1
Нет оператора -> <-
. Первый ->
- это просто синтаксис лямбда, который представлен в 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);
.