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); .