次のようなリストがあるとします。 CoreResult
のフィールドのフィールドはList<Double>
です。リストのリストをフラット化する3つの方法。そのうちの1つを好む理由はありますか?
final List<CoreResult> list = new LinkedList<>(SOME_DATA);
目的は、各CoreResult
オブジェクトからその特定のフィールドを抽出した後、リストを平坦化することです。 ここには3つのオプションがあります。それらのうちのいずれかが他のものよりも好ましいか?
オプション1:map()
Viaフィールドを抽出し、コレクタの内部に平ら
final List<Double> A = list.stream().map(CoreResult::getField)
.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);
オプション2:flatMap()
介し平坦、map()
Viaフィールドを抽出し、単純なコレクタ
final List<Double> B = list.stream().map(CoreResult::getField)
.flatMap(Collection::stream).collect(Collectors.toList());
オプション3:フィールドを抽出して1回でフラット化するそこCoreResultから任意のフィールドを抽出する必要はなかったし、代わりに1は、単にList<List<Double>>
を平らにしたい場合flatMap()
、シンプルコレクタ
final List<Double> C = list.stream().flatMap(
x -> x.getField().stream()).collect(Collectors.toList());
は、答えは違うだろうか?
パフォーマンスを気にする人は、 'LinkedList'を使うべきではありません。 'SOME_DATA'は既にコレクションでなければならないので、別の' List'にコピーする意味がありません。したがって、好ましい方法は 'SOME_DATA.stream()です。/*あなたが好きな3つのオプションのうちのどれでも*/'... – Holger