2014-07-24 107 views
72

我最近偶然碰見了如下代碼:- >< - 操作符有什麼作用?

IntPredicate neg = x -> x <- x; 

這是什麼,某種反向雙拉姆達的?

+49

我的猜測:Lambda'(x) - >(x <-x)' –

+1

我很想投票結束「簡單的印刷錯誤」。 ;) –

+13

這就是括號有時候有用的一個例子。 – MicSim

回答

88

運營商沒有-> <-。第一個->只是lambda語法,如Java 8中引入的那樣,而第二個<-是'小於'<和'一元減號'-的誤導串聯。

可以讀取它作爲IntPredicate neg = (x) -> (x < (-x));,即它測試x是否大於-x更小,這是對於所有(當然,most)負數的情況下,因此得名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 

只是爲了完整性:這個測試不僅是(故意?)很難理解,但是 - 在評論中指出 - 它也失敗了Integer.MIN_VALUE(這是==-Integer.MIN_VALUE)。相反,你應該使用更簡單的IntPredicate neg = x -> (x < 0);

+17

「這是所有負數的情況下」...除了'Integer.MIN_VALUE';) – fredoverflow

+14

真的,你不知道什麼是錯誤的簡單的'x <0' –

+7

@MarkRotteveel你的版本看起來不像ASCII藝術,它只是可讀的。 – Gimby

相關問題