Javaにおけるメソッドリファレンス
メニューを表示するにはスワイプしてください
Stream API の実践に入る前に、ラムダ式のいくつかのショートカットについて確認します。プログラマーはこれらの「ショートカット」を 構文糖衣(シンタクティックシュガー)と呼びます。
この章では、メソッド参照 と、それを ラムダ式の代替 として使用する方法について説明します。
メソッド参照
ラムダ式 の簡単な例を見て、それを メソッド参照 に置き換えてみましょう。
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(e -> e.toUpperCase()).forEach(e -> System.out.print(e)); } }
2つのラムダ式を使用するのはあまりエレガントではありません。特に、それらを宣言されているクラスからのメソッド参照に短縮できる場合はなおさらです。
構文は次のようになります。
Example.java
1(Class::Method)
上記のコードをメソッド参照を使って改善:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(String::toUpperCase).forEach(System.out::print); } }
toUpperCaseメソッドはStringクラスの一部であるため、String::toUpperCaseという構文を使用。メソッド参照を使う場合、各要素に対して操作が適用されるため、ラムダ式を使う必要はない。また、画面への出力もSystem.out::printに置き換えており、これもメソッド参照。プログラムは各要素にSystem.out.print()メソッドを適用する。
ちなみに、IntelliJ IDEAは、可能な場合はラムダ式をメソッド参照に置き換えることを常に提案するため、毎回構文を覚える必要はない。
このように、IntelliJ IDEA自体がメソッド参照を使用してコードを改善することを提案します。
まとめ
まとめると、メソッド参照はプログラム上の負担を増やすことはありません。プロセスを最適化するわけではありませんが、複雑にもなりません。この構文は単に記述するコード量を少し減らし、可読性を向上させるためのものです。ラムダ式を使うかメソッド参照を使うかはあなた次第です。例えば、私はラムダ式を記述する方が分かりやすいと感じており、その後IntelliJが自動的にメソッド参照に置き換えてくれます。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください