1. ホーム

[解決済み] Java 8 - リストを変換する最良の方法:マップまたはforeach?

2022-04-05 04:48:07

質問

リストがあります myListToParse ここで、要素をフィルタリングして各要素にメソッドを適用し、その結果を別のリストに追加したいのです。 myFinalList .

Java 8では、2つの異なる方法でそれを行うことができることに気づきました。私はそれらの間でより効率的な方法を知り、1つの方法が他の方法よりも優れている理由を理解したいと思います。

第3の方法について、何か提案があれば教えてください。

方法1:

myFinalList = new ArrayList<>();
myListToParse.stream()
        .filter(elt -> elt != null)
        .forEach(elt -> myFinalList.add(doSomething(elt)));

方法2:

myFinalList = myListToParse.stream()
        .filter(elt -> elt != null)
        .map(elt -> doSomething(elt))
        .collect(Collectors.toList()); 

解決方法は?

この場合、パフォーマンスの差はほとんどありません。

方法2が望ましい理由は

  1. ラムダ式の外側に存在するコレクションを変更する必要がない。

  2. コレクションパイプラインで実行されるさまざまなステップが、最初にフィルター操作、次にマップ操作、そして結果を収集するというように順次記述されているため、より読みやすくなっています(コレクションパイプラインの利点については、Martin Fowler の 秀逸な記事 .)

  3. を置き換えることで、値を収集する方法を簡単に変更することができます。 Collector が使用されます。 場合によっては、独自の Collector しかし、その場合、簡単に再利用できるという利点があります。