箭头操作符' - >'在Java中做什么?

Mik*_*der 151 java intellij-idea apache-commons java-8 apache-commons-collection

在搜索一些代码时,我遇到了箭头操作符,它到底是做什么的?我以为Java没有箭头操作符.

return (Collection<Car>) CollectionUtils.select(listOfCars, (arg0) -> {
        return Car.SEDAN == ((Car)arg0).getStyle();
});
Run Code Online (Sandbox Code Playgroud)

详细信息:Java 6,Apache Commons Collection,IntelliJ 12

更新/答案:事实证明IntelliJ 12支持Java 8,它支持lambdas,并且"折叠"Predicates并将它们显示为lambda.下面是"未折叠"的代码.

return (Collection<Car>) CollectionUtils.select(listOfCars, new Predicate() {
    public boolean evaluate(Object arg0) {
        return Car.SEDAN == ((Car)arg0).getStyle();
    }
});
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 109

这是新的lambda表达式的语法的一部分,将在Java 8中引入.有几个在线教程可以解决它,这里是一个链接.基本上,将->参数(左侧)与实际表达式(右侧)分开.

  • OP使用JDK 6,所以这真的只是IntelliJ折叠代码,按照下面的@antonm回答 (10认同)
  • @SeanLandsman OP可能正在使用Java 6,但在问题中他说他在其他地方遇到过该代码.至于为什么IntelliJ没有报告错误,这是一个谜(也许在OP的系统中安装了一个Java 7版本).但这是Java中lambda表达式的语法,毫无疑问. (6认同)

Ant*_*n-M 30

我相信,这个箭头因你的IDE而存在.IntelliJ IDEA用一些代码做了这样的事情.这称为代码折叠.您可以单击箭头以展开它.

  • @DavidConrad不,这没错.IntelliJ确实折叠了功能接口的内联实现,看起来像lambdas. (34认同)
  • 那是错的.这是一个Java 8 lambda表达式. (17认同)
  • 看看问题:"详细信息:Java 6,Apache Commons Collection,IntelliJ 12"Lambda in java 6 ??? (12认同)

小智 27

当您想要实现接口时,这个也很有用

Runnable r = ()-> System.out.print("Run method");
Run Code Online (Sandbox Code Playgroud)

相当于

Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.print("Run method");
            }
        };
Run Code Online (Sandbox Code Playgroud)

  • @Pirks - 只能在只有 1 个方法的接口上使用它, (8认同)
  • 为什么提供这个功能? (4认同)
  • @Akaisteph7,当您不想定义一种方法时,因为您发现只有一个调用者会调用该方法。在这些情况下,最好不要在单独的位置定义方法,而是传入方法主体,阅读有关匿名方法和 lambda 的内容。 (4认同)
  • 我如何才能看到特定的 run() 方法被覆盖? (4认同)
  • Runnable 包含其他覆盖方法。具体如何选择 run() ? (2认同)

sim*_*mas 12

这是一个lambda表达式.

这意味着,从listOfCars中,arg0是该列表的项目之一.有了他要做的那个项目,因此 - >,括号内的任何内容.

在这个例子中,他将返回符合条件的汽车列表

Car.SEDAN == ((Car)arg0).getStyle();
Run Code Online (Sandbox Code Playgroud)


Man*_*asi 7

java 8 中添加了新的lambda 表达式运算符

Lambda 表达式是方法编写的简写方式。
它间接用于实现功能接口

主要语法:(参数)-> { 语句;}

您应该了解一些有效编写 lambda 表达式的基本规则