2016-03-31 23 views
-3

hep birlikte liste değerlerini Birleştirme:Ben böyle bir harita dönüştürmek istiyorum bir harita

Map<String, List<String>> 

sonuç listesi tüm Liste değerlerinin birleştirme olduğunu

List<String> 

için.

haritası girişlerinin Stream üzerine
+2

Yanıt verenler, lütfen bu tür sorular için hazır çözümler sağlayın. Biz onları burada teşvik etmek istemiyoruz. Önce kendi kendine deneyelim diye OP'ye yardım edelim. – Maroun

+0

hazır bir çözüm değil, ne anlama geliyor? – ypriverol

+1

Bkz. Http://stackoverflow.com/questions/29826417/how-to-retainall-of-list-of-lists-using-stream-reduce/29826611 –

cevap

4

sadece

List<String> result = map.values().stream().flatMap(List::stream).collect(Collectors.toList()); 

olabilir Bu oluşturduğu bir akış içine values() sonra düz haritalarla her liste haritanın değerleri alır onun unsurları ve sonucu bir liste halinde toplar.

düz eşleme olmadan başka bir alternatif, her bir listesi ve bu nedenle daha fazla ölçülebilir olabilir, (values().stream() tarafından döndürülen) Stream<List<String>> toplanan her sonucu addAll arayarak, doğrudan toplamaktır.

List<String> result = map.values().stream().collect(ArrayList::new, List::addAll, List::addAll); 
1

Kullanım flatMap:

List<String> list = map.entrySet() 
         .stream() 
         .flatMap(e->e.getValue().stream()) 
         .collect(Collectors.toList()); 
+0

Eran: Farklı bir notta, yukarıdaki ifade sonucu oluşturulur. Her operasyonda daha geçici nesneler (flatMap ve topla)? –

+0

@Ravindrababu Neye göre daha fazla geçici nesne? – Eran

+0

Scala, map.flatMap() gibi immutable koleksiyon döndürme ve sonra toplamak() immutable koleksiyon –