-> <- 运算符是做什么的?

What does the -> <- operator do?

提问人:fredoverflow 提问时间:7/24/2014 更新时间:4/11/2015 访问量:3328

问:

我最近遇到了以下代码:

IntPredicate neg = x -> x <- x;

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

Java 语法 lambda 混淆 java-8

评论

50赞 tobias_k 7/24/2014
我的猜测:Lambda(x) -> (x < -x)
13赞 MicSim 7/24/2014
这是一个例子,括号有时是好的。
13赞 Alex 7/24/2014
也许它与-->运算符有关
5赞 Oliver Spryn 7/25/2014
@rightfold 我不同意。“重复”问题是关于C++的,而不是Java的,这个问题在Java引入lambda表达式之前几年就被问到了。
4赞 Chris Hayes 7/25/2014
@rightfold 这很难保证。你或我可能会,但其他正在经历艰难一天的人可能仍然难以解析正在发生的事情。无论如何,由于它不是完全重复的,因此变得有些主观,而且缺乏接近的投票似乎表明大多数人都希望这个问题留下来。

答:

91赞 tobias_k 7/24/2014 #1

没有操作员。第一个只是 lambda 语法,如 Java 8 中引入的那样,第二个是 'small than' 和 'monary minus' 的误导性串联。-> <--><-<-

你可以把它读作 ,即它测试是否小于 ,所有(嗯,大多数)负数都是这种情况,因此得名 。IntPredicate neg = (x) -> (x < (-x));x-xneg

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_VALUEIntPredicate neg = x -> (x < 0);

评论

17赞 fredoverflow 7/24/2014
“所有负数都是这种情况”......除了Integer.MIN_VALUE ;)
7赞 Gimby 7/25/2014
@MarkRotteveel您的版本看起来不像 ASCII 艺术,它只是可读的。
35赞 fredoverflow 7/25/2014
@Gimby 我喜欢检查 x 是否小于 3,因为表达了我对 x ;) 的热爱x <3
6赞 Holger 7/28/2014
如果您非常喜欢“反向 lambda 运算符”,您仍然可以使用......x <- 0