【保存版】Javaのラムダ式とは? 使い方・メリット・サンプルコード解説

Java 8から導入されたラムダ式は、コードを簡潔にし、関数型プログラミングの恩恵を受けられる強力な機能です。本記事では、初心者〜中級者向けにラムダ式の基本から実践的な使い方までをわかりやすく解説します。


この記事でわかること

  • Javaのラムダ式とは何か
  • 書き方のルールと省略記法
  • よく使う用途とサンプルコード
  • メリット・デメリット

ラムダ式とは? 簡単に言うと…

ラムダ式 = 簡潔に書ける「無名関数」

従来の無名クラスと比較して、ラムダ式を使うことで、処理の定義をその場で短く書くことができます。


基本構文と読み方

(引数) -> { 処理 }

簡単な例

(int x, int y) -> { return x + y; }

これを省略すると

(x, y) -> x + y

従来の無名クラスとの比較

無名クラスの書き方(Java 7以前)

Runnable r = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello");
    }
};

ラムダ式で書いた場合(Java 8以降)

Runnable r = () -> System.out.println("Hello");

図解:従来 vs ラムダ式

[無名クラス]
↓冗長で長い
Runnable r = new Runnable() { ... }

[ラムダ式]
↓スッキリ
Runnable r = () -> { ... }

よく使う場面とサンプルコード

1. スレッド処理(Runnable)

new Thread(() -> System.out.println("別スレッド実行")).start();

2. リストのソート(Comparator)

List<String> list = Arrays.asList("banana", "apple", "cherry");
list.sort((a, b) -> a.compareTo(b));
System.out.println(list);

3. forEachでの繰り返し処理

List<Integer> nums = Arrays.asList(1, 2, 3);
nums.forEach(n -> System.out.println(n));

4. Stream APIとの組み合わせ

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream()
     .filter(n -> n.startsWith("A"))
     .forEach(System.out::println);

ラムダ式の省略ルール

条件書き方の変化例
引数が1つx -> ... (括弧省略OK)
戻り値が1行x -> x * 2(波括弧・return省略)
型推論が可能な場合(x, y) -> x + y(型省略)

ラムダ式のメリット

  • コードが短く・読みやすくなる
  • 関数の引数として処理を渡せる
  • Stream APIとの親和性が高い
  • 無名クラスよりも見通しがよい

ラムダ式のデメリット

デメリット内容
デバッグしづらいどこで例外が起きたか追いづらいことがある
可読性が逆に下がる場合あり複雑な処理はかえって読みにくくなる
Java初心者には少しとっつきにくい構文に慣れるまで違和感があることも

ラムダ式でよく使う関数型インターフェース

インターフェース名引数戻り値
Runnableなしなし() -> System.out.println()
Consumer<T>1つなしs -> System.out.println(s)
Function<T,R>1つ1つx -> x * 2
Predicate<T>1つbooleans -> s.isEmpty()

まとめ

項目ポイント
ラムダ式とは無名関数(処理を短く書ける)
基本構文(引数) -> { 処理 }
よく使う用途Runnable、Comparator、forEach、Streamなど
メリット簡潔・柔軟・高機能
デメリットデバッグしにくい、複雑すぎると逆に読みにくい

補足:ラムダ式を使いすぎるとどうなる?

読みやすさが損なわれる可能性があります。可読性と簡潔さのバランスが重要です。メソッド参照(System.out::printlnなど)も適切に使いましょう。

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