Java 中的箭頭運算子 ->
Mohammad Irfan
2023年1月30日
2021年10月2日
本教程介紹了箭頭運算子 (->
) 在 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...