Java 8 ストリームを使用していると、複数ステートメントのラムダ式をリファクタリングする必要があることがよくあります。これを簡単な例で説明します。次のコードを書き始めたとします。
Stream.of(1, 3).map(i -> {
if (i == 1) {
return "I";
} else if (i == 3) {
return "E";
}
return "";
}).forEach(System.out::println);
今、私はmap呼び出しの大きなラムダ式があまり好きではありません。したがって、そこからリファクタリングしたいと思います。Functionクラスでのインスタンスを作成するか、2 つのオプションが表示されます。
private static Function<Integer, String> mapper = i -> {
if (i == 1) {
return "I";
} else if (i == 3) {
return "E";
}
return "";
};
次のように使用します。
Stream.of(1, 3).map(mapper).forEach(System.out::println);
または、単にメソッドを作成します。
private static String map(Integer i) {
if (i == 1) {
return "I";
} else if (i == 3) {
return "E";
}
return "";
}
メソッド参照を使用します。
Stream.of(1, 3).map(Test::map).forEach(System.out::println);
明らかな好みの問題は別として、どちらのアプローチにも利点や欠点はありますか?
たとえば、メソッド参照の場合、スタック トレースが読みやすくなることはわかっていますが、これは小さな利点です。