java - relacionales - ¿Qué hace el operador-><-?
precedencia de operadores java (1)
Recientemente me encontré con el siguiente código:
IntPredicate neg = x -> x <- x;
¿Qué es esto, algún tipo de doble lambda inversa?
No hay operador -> <-
. La primera ->
es solo una sintaxis lambda, como se introdujo en Java 8, y esa segunda <-
es una concatenación engañosa de ''más pequeño que'' <
y ''menos unario'' -
.
Puedes leerlo como IntPredicate neg = (x) -> (x < (-x));
, es decir, comprueba si x
es más pequeño que -x
, que es el caso de todos (bueno, la most ) números negativos, de ahí el nombre 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
Para completar: esta prueba no solo es (¿intencionalmente?) Difícil de entender, sino que, como se señala en los comentarios, también falla para Integer.MIN_VALUE
(que es ==-Integer.MIN_VALUE
). En su lugar, probablemente debería usar el IntPredicate neg = x -> (x < 0);
mucho más IntPredicate neg = x -> (x < 0);
.