2014-07-24 16 views
72

ho recentemente venuto sul seguente codice:Cosa fa l'operatore -><-?

IntPredicate neg = x -> x <- x; 

Che cosa è questo, una sorta di inversione a doppio lambda?

+49

La mia ipotesi: Lambda '(x) -> (x <-x)' –

+1

Sono tentato di votare per chiudere per "semplice errore tipografico". ;) –

+13

Questo è un esempio di parentesi a volte utile. – MicSim

risposta

88

Non c'è l'operatore -> <-. Il primo -> è solo la sintassi lambda, come introdotto in Java 8, e quel secondo <- è una concatenazione ingannevole di 'minore di' < e 'unario meno' -.

È possibile leggere come IntPredicate neg = (x) -> (x < (-x));, cioè esso verifica se x è inferiore -x, che è il caso per tutti (beh, most) numeri negativi, da cui il nome 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 

Solo per completezza: Questo test non è solo (intenzionalmente?) Difficile da capire, ma - come sottolineato nei commenti - viene a mancare anche per Integer.MIN_VALUE (che è ==-Integer.MIN_VALUE). Invece, probabilmente dovresti semplicemente usare il più semplice IntPredicate neg = x -> (x < 0);.

+17

"che è il caso di tutti i numeri negativi" ... eccetto 'Integer.MIN_VALUE';) – fredoverflow

+14

Davvero, ti chiedi cosa c'è di sbagliato con un semplice' x <0' –

+7

@MarkRotteveel la tua versione non sembra Arte ASCII, è appena leggibile. – Gimby