Java 8 stream 合并map 分组计算
Map<String, Map<String, Long>> map = new HashMap<>(); Map<String, Long> param1 = new HashMap<>(); param1.put("a", 100L); param1.put("b", 200L); param1.put("c", 500L); map.put("A", param1); Map<String, Long> param2 = new HashMap<>(); param2.put("a", 100L); param2.put("b", 200L); param2.put("c", 800L); param2.put("d", 1000L); map.put("B", param2); System.out.println("map = " + map); Map<String, Long> collect = map.values() .stream() .map(Map::entrySet) .flatMap(Set::stream) .collect( Collectors.groupingBy( Map.Entry::getKey, Collectors.summingLong(Map.Entry::getValue) ) ); System.out.println("collect = " + collect); List<Map.Entry<String, Long>> collect1 = map.values() .stream() .map(Map::entrySet) .flatMap(Set::stream) //.distinct() .collect(Collectors.toList()); System.out.println("collect1 = " + collect1); Map<String, Long> collect2 = map.values() .stream() .map(Map::entrySet) .flatMap(Set::stream) .distinct() .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (f, n) -> n)); System.out.println("collect2 = " + collect2);
输出: map = {A={a=100, b=200, c=500}, B={a=100, b=200, c=800, d=1000}} collect = {a=200, b=400, c=1300, d=1000} collect1 = [a=100, b=200, c=500, c=800, d=1000] collect2 = {a=100, b=200, c=800, d=1000}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~