3

次のことを達成するための最良、安価、最もパフォーマンスの高い方法は何ですか?

整数のセットを返すメソッドを提供する of Objects がありますCollectionmyObjectセット内のすべてのアイテムを新しいセットに追加したい。

LinkedList<myObject>  ll = new LinkedList<>();

    //fill the list bla bla

Set<Integer> result = ll.stream()
    .map(f -> f.getTheSet())
    .flatMap(Set::stream)
    .collect(Collectors.toCollection(TreeSet::new));

System.out.println(result.toString());

すべてのオブジェクトからすべての整数を含む結果セットを取得するより良い方法はありますか? flatMapコマンドで「セットをアンパック」することは避けたいです。代わりに、とにかく解凍する.addAllので、最終的には問題ではないようなことを考えますか?.addAll

4

2 に答える 2

12

3 つの引数addAllを使用して収集できます。collect

Set<Integer> result = ll.stream()
        .map(MyObject::getTheSet)
        .collect(HashSet::new, Set::addAll, Set::addAll);

HashSet::new新しいコンテナを作成し、Set::addAll各セットをコンテナに追加しますSet::addAll。このストリームが並行して実行される場合は、2 つ目のコンテナをマージします。

(またはTreeSet::new、特に が必要な場合に使用しますTreeSet

于 2015-08-11T00:13:48.507 に答える