2015-01-15 58 views
18

Ben List<Map<String, String>> sahip listedeki her öğe örneğinJava 8 Akış groupingby

IBM -> James, Mark 
ATT -> Henry, Robert.. 


private Map<String,List<String>> groupByCompanyName(List<Map<String, String>> list) { 
    return list.stream().collect(Collectors.groupingBy(item->item.get("companyName"))); 
} 
firstName Ben bunun bir liste CompanyName eşleştiren bir Map<String, List<String>> oluşturmak isteyen bir harita örneğin

companyName - IBM 
firstName - James 
country - USA 
... 

olduğunu

ancak bu Map<String, List<Map<String, String>> (eşleme comanyName eşleme haritaların listesi) oluşturacaktır

nasıl oluşturulur? liste olarak alınacak mansap içinde haritadan değerleri belirtin

groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream) 

yani:

cevap

29

mapping(item->item.get(<name>), toList()) test etmemiş mı, ama böyle bir şey çalışması gerekir:

Map<String, List<String>> namesByCompany 
    = list.stream() 
      .collect(Collectors.groupingBy(item->item.get("companyName"), 
        Collectors.mapping(item->item.get("firstName"), Collectors.toList()))); 
+0

'Collector.toArray' yöntemi olmadığından' List ' –

+1

yerine' String [] 'yi elde etmenin bir yolu var mı (en azından doğrudan değil). @VinitSolanki – Eran

5

Sen formu kullanabilirsiniz. Belgelerin bunun için iyi bir örneği var (here).

downstream olmak gibi bir şey -

0

groupingBy yöntemi olan değerlerdir listeleri bir harita verir. Bu listeleri bir şekilde işlemek istiyorsanız, bir "alt koleksiyoncu" tedarik edin. Eğer bir List değerini değer olarak istemiyorsanız, bir alt koleksiyoncu sağlamanız gerekir.

Harita işlemek için, Koleksiyoncular dosyasında statik yöntem eşlemesi kullanabilirsiniz:

Collector<T, ?, R> mapping(Function<? super T, ? extends U> mapper, 
          Collector<? super U, A, R> downstream) 

Temelde aşağı sonuçlarına bir işlev uygulayarak bir kollektörü üretir ve başka toplayıcı işlevi geçirir.

Collectors.mapping(item->item.get("firstName"), Collectors.toList()) 

Bu, istediğiniz şeyi gerçekleştirecek bir alt toplayıcı döndürecektir.