Java 中的箭头运算符 ->

本教程介绍了箭头运算符 (->) 在 Java 中的作用,并列出了一些示例代码来理解该主题。

在 Java 8 中,增加了一个新特性 lambda 表达式,同时在 Java 中出现了箭头运算符,用于形成 lambda 表达式。它将参数与表达式主体分开。

(parameters) -> { statements; } // Lambda expression having arrow

Lambda 表达式是在 Java 8 中引入的,可以用来代替 Java 中的匿名类,使代码更加简洁和可读。

下面是我们如何在 Java 8 之前的 Java 中创建匿名类的示例。

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

这就是我们如何在 Java 8 中使用 lambda 表达式来实现上述任务。

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

让我们从一些示例开始,以了解 lambda 和箭头运算符的使用。

Java 中箭头运算符的使用

在此示例中,我们使用箭头运算符创建了一个 lambda 表达式,该表达式实现了 Drawable 接口的 draw() 方法。请参考下面的示例。

interface Drawable{
    public void draw();
}
public class Main {
    public static void main(String[] args) {
        int width = 20;
        // arrow operator
        Drawable d2=()->{
            System.out.println("Drawing width:  "+width);
        };
        d2.draw();
    }
}

输出:

Drawing width:  20

由于 lambda 表达式是使用函数式方法创建简洁代码的一种超级方式,因此我们可以在 Java 代码中以多种方式使用它。让我们看一些我们可以应用它的例子。

Java 集合中的箭头运算符

在此示例中,我们使用 lambda 表达式过滤 ArrayList 数据。我们使用了流 API 和 filter() 方法来获得所需的结果。你会注意到,使用 lambda 创建代码比使用非 lambda 代码更容易。请参考下面的示例。

package javaexample;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
class Product{
    int id;
    String name;
    float price;
    public Product(int id, String name, float price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
}
public class Main{
    public static void main(String[] args) {
        List<Product> list=new ArrayList<Product>();
        list.add(new Product(1,"Samsung S5",17000));
        list.add(new Product(3,"Iphone 12",100500));
        list.add(new Product(2,"Sony Xperia",25000));
        // using arrow to filter data
        Stream<Product> filtered_data = list.stream().filter(p -> p.price > 17000);
        filtered_data.forEach(
                product -> System.out.println(product.name+": "+product.price)
        );
    }
}

输出:

Iphone 12: 100500.0
Sony Xperia: 25000.0

Java 线程中的箭头运算符

这是 lambda 表达式的另一种用法,我们用它来实现可运行接口的 run() 方法。由于 Runnable 是单个方法接口,因此很容易使用 lambda 表达式。请参考下面的示例。

package javaexample;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class Main{
    public static void main(String[] args) {
        // using arrow
        Runnable r=()->{
            System.out.println("Thread is running...");
        };
        Thread t2 = new Thread(r);
        t2.start();
    }
}

输出:

Thread is running...