首页 > 编程语言 >Java 8 stream 合并map 分组计算

Java 8 stream 合并map 分组计算

时间:2022-12-05 15:02:22浏览次数:42  
标签:map Java stream Map collect param2 put

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}

 

标签:map,Java,stream,Map,collect,param2,put
From: https://www.cnblogs.com/bevis-byf/p/16952264.html

相关文章

  • Java和Java大数据如何选择?
    01Java与大数据的关系Java是一种语言,而大数据更像是一个方法论或者是集合。从事大数据行业,需要掌握的技能比较多,而且,java是必须要掌握的,举个简单的例子:做大数据的工作需......
  • 前端基础-03-JavaScript
    JavaScript概述ECMAScript和JavaScript的关系1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次......
  • ES6的Map数据结构
           ......
  • Java引用类型
    Java当中的数据类型:1.基本数据类型2.引用数据类型:类String数组抽象类接口枚举......数据类型的取值范围就是-2^(比特位数-1)---2^(比特位数-1)-1字符串类型变量(Str......
  • java中用整数相除获得小数并按位数输出
      俩个int类型的数据进行运算,结果也是int类型的,0.33333转为int类型为0.0;要求保留两位小数输出:System.out.printf("%.2f",b);//保留两位小数输出......
  • 【java】【File】用File相关类写一个小工具,完成从指定目录下抽取指定文件并复制到新路
    今日份代码:importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importjava.io.*;importjava.nio.charset.StandardCharsets;importjava.......
  • Java中Future 用来做异步任务返回
    我们在开发中会有这种场景,我们要调用远程服务的一个方法,并且拿到返回值去使用。笔者最近项目中出现了一个ANR,具体是调用了远程服务,发生异常一直没有返回值,然后导致ANR。怎......
  • java复制对象到某一实体类
    ObjectMapperobjectMapper=newObjectMapper();Objectshot=JSONObject.parse(echelonSnapshot);StockEchelonProductAuthConfstockEchelonProductAuthConf=object......
  • PHP Codeigniter 中的_remap方法简介
    在Codeigniter中,其实有个容易忽略掉的不错的控制器层处理的方法,那就是remap,这里简单介绍下。其实在CI的URL控制方式表示中,比如:example.com/inde......
  • (收藏)javascript变量提升
    函数和变量的声明总是会被解析器悄悄地被“提升”到方法体的最顶部上面是javascript变量提升的概念。为了更好地理解“变量提升”,我们先来看一段代码:(function(){cons......