我最近遇到了以下代码:
IntPredicate neg = x -> x <- x;
这是什么,某种反向双λ?
最佳答案
没有-> <-
运算符。如Java 8中所介绍的那样,第一个->
只是lambda语法,而第二个<-
是“小于” <
和“一元减” -
的误导性串联。
您可以将其读取为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);
。