231

在浏览一些代码时,我遇到了箭头运算符,它到底是做什么的?我认为Java没有箭头运算符。

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

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

更新/回答:事实证明 IntelliJ 12 支持 Java 8,它支持 lambda,并且正在“折叠”谓词并将它们显示为 lambda。下面是“未折叠”的代码。

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

5 回答 5

178

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

使用 lambda 表达式的一般语法是

(Parameters) -> { Body }其中->分隔参数和 lambda 表达式主体。

参数用括号括起来,这与方法相同,lambda 表达式主体是用大括号括起来的代码块。

于 2013-02-28T21:35:27.023 回答
62

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

Runnable r = ()-> System.out.print("Run method");

相当于

Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.print("Run method");
        }
};
于 2017-08-30T11:59:52.537 回答
34

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

于 2013-02-28T21:42:46.413 回答
15

这是一个 lambda 表达式。

这意味着,在 listOfCars 中,arg0 是该列表的项目之一。他将要使用该项目,因此->,括号内的任何内容。

在此示例中,他将返回符合条件的汽车列表

Car.SEDAN == ((Car)arg0).getStyle();
于 2013-02-28T21:37:13.203 回答
4

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

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

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

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

于 2019-03-25T08:18:01.100 回答