如何使用Java 8将Stream<Map<K,V>>收集到Map<K,List<V>>中?

3
我有一组Map<String,Double>数据流,我想将它们汇总成一个Map<String,List<Double>>。请问有什么建议吗?
谢谢!
2个回答

4

首先,您需要将您的映射流平展成一个映射条目流。然后,使用 Collectors.groupingByCollectors.mapping:

Map<String,List<Double>> result = streamOfMaps
    .flatMap(map -> map.entrySet().stream())
    .collect(Collectors.groupingBy(
        Map.Entry::getKey, 
        Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

2

假设我有以下内容:

Stream<Map<String, Double>> mapStream

那么答案是:
mapStream.map(Map::entrySet)
         .flatMap(Collection::stream)
         .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接