• ベストアンサー

ラムダ式

ラムダ式のサンプルで以下の2行目と3行目のパターンがあります。 結果は同じなのですが両者に何かに違いはあるのでしょうか。 【ラムダ式のサンプル】 List<String> lists = Arrays.asList("hoge", "fuga", "bar"); lists.stream().forEach(str -> System.out.println(str)); lists.forEach(str -> System.out.println(str));

質問者が選んだベストアンサー

  • ベストアンサー
  • KSOH
  • ベストアンサー率93% (29/31)
回答No.1

内容から本件の要点はラムダ式にはなくStreamインターフェースの方にあります。 結論は「この例では違いはない」です。3行目はListインターフェースのメソッドで2行目はStreamインターフェースのメソッドを使っているというだけの違いです。 Streamへ変換する本来の目的は任意のデータの列に対してプログラミングでよく出現するいろいろな操作パターンを簡便に記述することにあります。例えば lists.stream() .sorted((a, b) -> a.compareToIgnoreCase(b)) .limit(100) .forEach(s -> System.out.println(s)); などとすると「リストの各要素を大文字小文字を区別せずに並べ替え、その最初の100要素だけに制限し、その結果を表示する」といった具合です。よってStreamへ変換した直後に単にforEachすることには意味はなく、元のリストにあるforEachを使う方が適切です。

unko347
質問者

お礼

御回答ありがとうございます。 丁寧な解説ありがとうございました。