tipos relacionales precedencia operadores operador logicos ejemplos datos condicionales comparacion aritmeticos java syntax lambda obfuscation java-8

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