我最近发现了以下代码:
IntPredicate neg = x -> x <- x;
这是什么,某种反向双 Lambda?
没有 -> <-操作员。第一个 ->只是在 Java 8中引入的 lambda 语法,而第二个 <-是一个“小于”<和“一元减去”-的误导性串联。
-> <-
->
<-
<
-
您可以将它读作 IntPredicate neg = (x) -> (x < (-x));,即它测试 x是否小于 -x,这是所有(好吧,大部分)负数的情况,因此命名为 neg。
IntPredicate neg = (x) -> (x < (-x));
x
-x
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);。
Integer.MIN_VALUE
==-Integer.MIN_VALUE
IntPredicate neg = x -> (x < 0);