3分でわかるJavaラムダ式入門

Java_ラムダ式について Java

Javaで (x,y)->x+y の形を見ても、どう書けば正しいのか、何ができるのかわからないことはありませんか?

私も最初、「Functional Interfaceって何?」「メソッド参照はどう使うの?」と戸惑いました。

この記事では、ラムダ基本構文から関数型インターフェース、メソッド参照、Stream API連携、クロージャの仕組みまで、小学生でもわかる言葉でしっかり解説します。

「ラムダを使ったらループが激減し、コードが一気にスッキリした!」という声も多く聞かれます。

list.stream().filter(n->n%2==0).forEach(System.out::println); のように、一行で絞り込み・出力ができるんです。

さあ、Javaのラムダ式をマスターして、読みやすくて短いコードを書けるようになりましょう!

ラムダ式の基本構文を覚えよう

ラムダ式は「引数 → 処理」の形で書ける短い関数です。これを使うと、コードがシンプルになります。

通常、匿名クラスで書くと5~7行必要な処理が、ラムダ式なら1行で済みます。可読性が上がり、バグも入りにくくなるからです。
具体例を見てみましょう!

// 普通の匿名クラス
new Thread(new Runnable() {
  @Override
  public void run() {
    System.out.println("Hello");
  }
}).start();

// 同じ処理をラムダ式で
new Thread(() -> System.out.println("Hello")).start();

ここでは、() が引数、-> の右側が実行内容です。引数が1つなら括弧()を省略でき、処理が1行ならブロック{}も省略できます。

ラムダ式の構文は「(引数) -> {処理}」。これを覚えれば、Javaでも関数を“軽く”書けるようになります!

FunctionalInterfaceとの関係を理解する

ラムダ式は「関数型インターフェース(@FunctionalInterface)」に対してだけ使えます。

関数型インターフェースは抽象メソッドを1つだけ持つインターフェースです。これによって、コンパイラがどのメソッドを実装しているか判断できます。

@FunctionalInterface
interface Adder {
  int add(int a, int b);
}

Adder adder = (a, b) -> a + b;
System.out.println(adder.add(3, 5)); // → 8

RunnableSupplier<T>Consumer<T> も関数型インターフェースの一例です。

自作の関数型インターフェースを作ると、ラムダ式を自由に活用できます。

メソッド参照(::)の使いどころとメリット

メソッド参照はラムダ式をもっと簡潔に書く方法です。

ラムダ式の中で既存メソッドを呼び出すだけなら、ClassName::methodName 形式で記述でき、可読性が向上します。

List<String> names = List.of("Alice", "Bob", "Carol");

// ラムダ式
names.forEach(name -> System.out.println(name));
// メソッド参照
names.forEach(System.out::println);

静的メソッド参照 (Math::max) やインスタンスメソッド参照 (obj::instanceMethod)、コンストラクタ参照 (ClassName::new) も使えます。

メソッド参照を使うと、ラムダ式よりも短くシンプルに書けます。

Stream APIと組み合わせた実践例

Stream API とラムダ式を組み合わせると、データ処理が一行で書けてとても便利です。

filtermapcollect などの中間操作をチェーンでき、可読性と再利用性が向上します。

List<Integer> nums = List.of(1, 2, 3, 4, 5);
List<Integer> evens = nums.stream()
    .filter(n -> n % 2 == 0)
    .map(n -> n * n)
    .collect(Collectors.toList());
System.out.println(evens); // → [4, 16]

並列処理には parallelStream() を、順序を指定したい場合は sorted() を使えます。

Stream API とラムダ式を組み合わせると、データ操作が直感的に書けます。

まとめ:Javaラムダ式でコードを最適化しよう

本記事では、Javaのラムダ式について以下のポイントを学びました。

  1. 基本構文(引数) -> 処理 の形で短い関数を書ける。
  2. 関数型インターフェース:抽象メソッド1つのインターフェースに対してのみ使用可能。
  3. メソッド参照ClassName::methodName でラムダを簡潔に置き換え。
  4. Stream API連携filter/map/collect などでデータ処理を直感的にチェーン。
  5. クロージャ:外側変数を実質finalとしてキャプチャし、安全に利用。

ラムダ式を使いこなすと、従来の匿名クラスよりも格段に少ないコードで同じ処理が書けます。ぜひ、今日からJavaのラムダ式を活用して、読みやすく、保守しやすいコードを書いてみてください!

タイトルとURLをコピーしました