什么 - > < - 操作员吗?

时间:2014-07-24 15:46:30

标签: java syntax lambda obfuscation java-8

我最近发现了以下代码:

IntPredicate neg = x -> x <- x;

这是什么,某种反向双lambda?

1 个答案:

答案 0 :(得分:90)

没有-> <-运算符。第一个->只是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);