当前位置:  开发笔记 > 编程语言 > 正文

按Java 8中的Map列表分组

如何解决《按Java8中的Map列表分组》经验,为你挑选了1个好方法。



1> Tunaki..:

您需要flatMap在每个Map的条目集中创建一个Stream>.然后,可以使用收集groupingBy(classifier, downstream)器收集此Stream :分类器返回条目的键,下游收集器将条目映射到其值并将其收集到a中List.

Map> map = 
     list.stream()
         .flatMap(m -> m.entrySet().stream())
         .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));

此代码需要以下静态导入:

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;

以您的完整示例:

public static void main(String[] args) {
    Map m1 = new HashMap<>();
    m1.put("A", 1l);
    m1.put("B", 100l);

    Map m2 = new HashMap<>();
    m2.put("A", 10l);
    m2.put("B", 20l);
    m2.put("C", 100l);

    List> beforeFormatting = new ArrayList<>();
    beforeFormatting.add(m1);
    beforeFormatting.add(m2);

    Map> afterFormatting =
        beforeFormatting.stream()
                        .flatMap(m -> m.entrySet().stream())
                        .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));

    System.out.println(afterFormatting); // prints {A=[1, 10], B=[100, 20], C=[100]}
}

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有