- > <-操作符是做什么的?

我最近发现了以下代码:

IntPredicate neg = x -> x <- x;

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

3308 次浏览

没有 -> <-操作员。第一个 ->只是在 Java 8中引入的 lambda 语法,而第二个 <-是一个“小于”<和“一元减去”-的误导性串联。

您可以将它读作 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);