Java の矢印演算子
このチュートリアルでは、Java で矢印演算子(->
)が行うことを紹介し、トピックを理解するためのサンプルコードもいくつかリストします。
Java 8 では、新しい機能のラムダ式が追加され、同時に、ラムダ式を形成するために使用される矢印演算子が Java に存在するようになりました。引数を式の本体から分離します。
(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 でラムダ式を使用して上記のタスクを実装する方法です。
Runnable r = () -> System.out.print("Run method");
ラムダ演算子とアロー演算子の使用法も理解するために、いくつかの例から始めましょう。
Java での矢印演算子の使い方
この例では、矢印演算子を使用して、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
ラムダ式は機能的なアプローチで簡潔なコードを作成するための優れた方法であるため、Java コードでいくつかの方法で使用できます。それを適用できるいくつかの例を見てみましょう。
Java コレクションの矢印演算子
この例では、ラムダ式を使用して ArrayList データをフィルタリングします。ストリーム API と filter()
メソッドを使用して、目的の結果を取得しました。非ラムダコードよりもラムダを使用してコードを作成する方が簡単であることがわかります。以下の例を参照してください。
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 スレッドの矢印演算子
これはラムダ式のもう 1つの使用法であり、ランナブルインターフェイスの run()
メソッドを実装するために使用しました。Runnable はシングルメソッドインターフェイスであるため、ラムダ式を使用するのは簡単です。以下の例を参照してください。
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...