2016-04-18 8 views
5

私は、Java 8で新たなんだを使用して1フラットセット/リストの中に2次元オブジェクトセット/ ArrayListに変換するために、私は、例えば設定で設定した:がどのようにJavaの8

Set<Set<String>> aa = new HashSet<>(); 
Set<String> w1 = new HashSet<>(); 

w1.add("1111"); 
w1.add("2222"); 
w1.add("3333"); 

Set<String> w2 = new HashSet<>(); 
w2.add("4444"); 
w2.add("5555"); 
w2.add("6666"); 

Set<String> w3 = new HashSet<>(); 
w3.add("77777"); 
w3.add("88888"); 
w3.add("99999"); 

aa.add(w1); 
aa.add(w2); 
aa.add(w3); 

期待される結果:FLAT SETを。 ..のようなもの:

しかし、それは動作しません!

// HERE I WANT To Convert into FLAT Set 
// with the best PERFORMANCE !! 
Set<String> flatSet = aa.stream().flatMap(a -> setOfSet.stream().flatMap(ins->ins.stream().collect(Collectors.toSet())).collect(Collectors.toSet())); 

答えて

11

あなたは一度だけflatMapコールする必要があります:@エランの正しい答えの代わりとして

Set<String> flatSet = aa.stream() // returns a Stream<Set<String>> 
         .flatMap(a -> a.stream()) // flattens the Stream to a 
                // Stream<String> 
         .collect(Collectors.toSet()); // collect to a Set<String> 
+2

そして、あなたは '必要はありません。 setOfSet'はまったくありません。ちょうど 'aa'をストリームします。 – shmosel

+2

@shmosel良い点 – Eran

+0

ありがとう@エラン! 。 – VitalyT

8

を、あなたは3引数collectを使用することができます。

Set<String> flatSet = aa.stream().collect(HashSet::new, Set::addAll, Set::addAll);