繁体   English   中英

Java 中的箭头运算符“->”有什么作用?

[英]What does the arrow operator, '->', do in Java?

在浏览一些代码时,我遇到了箭头运算符,它到底是做什么的? 我以为 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();
    }
});

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

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

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

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

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

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

相当于

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

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

这是一个 lambda 表达式。

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

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

Car.SEDAN == ((Car)arg0).getStyle();

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

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

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

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

当您想从非 UI 线程更新您的 UI 时,使用 runOnUiThread()。 例如,如果您想从后台线程更新您的 UI。 你也可以使用 Handler 来做同样的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM