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つ | boolean | s -> s.isEmpty() |
まとめ
項目 | ポイント |
---|---|
ラムダ式とは | 無名関数(処理を短く書ける) |
基本構文 | (引数) -> { 処理 } |
よく使う用途 | Runnable、Comparator、forEach、Streamなど |
メリット | 簡潔・柔軟・高機能 |
デメリット | デバッグしにくい、複雑すぎると逆に読みにくい |
補足:ラムダ式を使いすぎるとどうなる?
読みやすさが損なわれる可能性があります。可読性と簡潔さのバランスが重要です。メソッド参照(System.out::println
など)も適切に使いましょう。