箭头运算符“->”在 Java 中有何作用?

问题描述 投票:0回答:7

在查找一些代码时,我遇到了箭头运算符,它到底是做什么的?我以为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,Java 8 支持 lambda,并且“折叠”谓词并将其显示为 lambda。下面是“展开”的代码。

return (Collection<Car>) CollectionUtils.select(listOfCars, new Predicate() {
    public boolean evaluate(Object arg0) {
        return Car.SEDAN == ((Car)arg0).getStyle();
    }
});
java java-8
7个回答
216
投票

这是将在 Java 8 中引入的新 lambda 表达式语法的一部分。有几个在线教程可以帮助您掌握它的窍门,这里有一个 link 。基本上,

->
将参数(左侧)与实现(右侧)分开。

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

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

参数括在括号中,这与方法相同,并且 lambda 表达式主体是括在大括号中的代码块。


84
投票

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

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

相当于

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

35
投票

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


15
投票

这是一个 lambda 表达式。

这意味着,从 listOfCars 中,arg0 是该列表的项目之一。 对于该项目,他将要做的事情,因此 ->,括号内的任何内容。

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

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

7
投票

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

Lambda 表达式是

方法编写的最短方式。 间接用于实现
功能接口

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

您应该了解一些基本的

编写有效 lambda 表达式的规则


1
投票
箭头运算符用于创建 lambda 表达式,将参数与 lambda 主体链接/分隔。 语法: (参数) -> {表达式}; 它也是在java中实现onClickListeners等功能接口的有效方法。


0
投票
只是一个有效的例子

interface StringFunction { String run(String strS, String strT); } public class Main { public static void main(String[] args) { //Implement a function StringFunction concatWithDotsFunction = (s , t) -> s + "..." + t; String concatWithDotsResult = concatWithDotsFunction.run("Hello" , "you"); System.out.println("concatWithDotsResult: " + concatWithDotsResult); //Implement a function StringFunction concatWithUnderscoreFunction = (s , t) -> s + " _ " + t; //Call a method that takes the function as argument printFormatted("Hello", "you" , concatWithUnderscoreFunction); } public static void printFormatted(String strS, String strT, StringFunction function) { String result = function.run(strS, strT); System.out.println("result: " + result); } }
    
© www.soinside.com 2019 - 2024. All rights reserved.