🤖

【Java Gold】ラムダ式とメソッド参照

に公開

はじめに

ラムダ式とメソッド参照について、試験対策として整理しました。

ラムダ式とメソッド参照について

Javaのラムダ式メソッド参照は、関数型インタフェース(SAM:Single Abstract Method)を利用して、処理を簡潔に記述するための機能です。

ラムダ式の基本構文

(引数) -> { 処理 }

ラムダ式のバリエーション

形式 書き方 説明
引数なし () -> System.out.println("Hello") Runnable によく使われる形式
引数1つ s -> s.length() 型推論が適用される
引数2つ (a, b) -> a + b 複数引数の例
ブロックあり (x) -> { System.out.println(x); return x * 2; } 複数文なら {} が必要

主な関数型インタフェースと使用例

インタフェース 引数 戻り値 使用例
Runnable なし なし () -> System.out.println("Run")
Supplier<T> なし T () -> "Hello"
Consumer<T> T なし s -> System.out.println(s)
Function<T, R> T R s -> s.length()
Predicate<T> T boolean s -> s.isEmpty()
BiFunction<T, U, R> T, U R (a, b) -> a + b

メソッド参照の基本

ラムダ式が「既存のメソッド呼び出しのみ」の場合、より簡潔に書けるのがメソッド参照です。

メソッド参照の書式と例

書式 説明
クラス名::staticメソッド Math::max 静的メソッドの参照
オブジェクト::インスタンスメソッド "abc"::toUpperCase 特定オブジェクトのメソッド
クラス名::インスタンスメソッド String::length 引数のオブジェクトに対して呼ばれる
クラス名::new ArrayList::new コンストラクタの参照

ラムダ式からメソッド参照への変換例

ラムダ式 メソッド参照
s -> s.length() String::length
() -> new ArrayList<>() ArrayList::new
(x, y) -> Math.max(x, y) Math::max
s -> System.out.println(s) System.out::println

メソッド参照の注意点

  • メソッドの引数の数・型・戻り値の型が、対象の関数型インタフェースと一致している必要がある
  • 複雑な処理や条件分岐がある場合は、ラムダ式の方が明示的で読みやすい

ラムダ式とメソッド参照の比較

観点 ラムダ式 メソッド参照
可読性 柔軟で直感的 より簡潔でスッキリ
表現できる処理 任意の処理(複雑なロジックもOK) 既存メソッドの呼び出しのみ
適した場面 処理が複雑、複数行になる場合 単純な処理、1メソッド呼び出しのみ

おわりに

誤記や改善点があればコメントなどでご指摘ください。

Discussion