Java の矢印演算子

Mohammad Irfan 2023年10月12日
  1. Java での矢印演算子の使い方
  2. Java コレクションの矢印演算子
  3. Java スレッドの矢印演算子
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...

関連記事 - Java Operator