2016-04-18 61 views
5

ben java 8'de yeniyim kullanarak tek Düz Seti/Listesine iki boyut nesne Seti/ArrayList dönüştürme, ben örneğin Set Set adres:Nasıl 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); 

BEKLENEN SONUÇ: DÜZ SET. .. gibi bir şey:

Ama işe yaramıyor!

// 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())); 

Herhangi bir fikir?

cevap

11

Sadece bir kez flatMap çağırmanız gerekir:

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

Ve 'gerekmez setOfSet 'hiç. Sadece 'aa' akışı. – shmosel

+2

@shmosel İyi haber ver – Eran

+0

Teşekkürler! . – VitalyT

8

@ Eran en doğru cevabı alternatif olarak, 3-argüman collect kullanabilirsiniz:

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