Que fait l’opérateur -> <?

Je suis récemment tombé sur le code suivant:

IntPredicate neg = x -> x <- x; 

Qu’est-ce que c’est, une sorte de double lambda inverse?

Il n’y a pas d’opérateur -> < - . Ce premier -> est juste la syntaxe lambda, telle qu'introduite dans Java 8, et cette seconde < - est une concaténation trompeuse de 'plus petit que' < et 'unaire moins' - .

Vous pouvez le lire comme IntPredicate neg = (x) -> (x < (-x)); , c'est-à-dire qu'il teste si x est inférieur à -x , ce qui est le cas pour tous les nombres négatifs (enfin la plupart ), d'où le nom 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 

Juste pour être complet: Ce test n'est pas seulement (intentionnellement?) Difficile à comprendre, mais - comme indiqué dans les commentaires - il échoue également pour Integer.MIN_VALUE (qui est ==-Integer.MIN_VALUE ). Au lieu de cela, vous devriez probablement utiliser le plus simple IntPredicate neg = x -> (x < 0); .