Java8的stream流分组

您所在的位置:网站首页 java过滤集合里的元素有哪些 Java8的stream流分组

Java8的stream流分组

2023-05-26 01:22| 来源: 网络整理| 查看: 265

作为Java8的新生代的一员大将Stream流 作为新老程序员我觉得应该都需要牢牢掌握这个技术,当然现在也已经距离stream流出现很久了,不过目前作为最高效的处理集合方式,平时可以用来获取集合中的某一列数据啊、统计同一个字段的总数啊之类的,不过有时候需求需要用到分组而sql里不能直接分组的情况下,使用stream流来进行分组是最好不过的了 不多BB,直接上代码

//获取明细内容 List list = transferMapper.getTransferDetail(billNumber); //根据物料进行分组 Map listMap = list.stream().collect(Collectors.groupingBy(item -> item.get("mcode").toString()));

首先我们使用了一个sql查询了一个List类型的集合数据出来,然后比如需求需要根据某个字段进行分组 比如原来可能它长这样

[ //物料 { "id": "1657928516314136578", "mcode": "xxx",//物料 } ]

那么根据分组之后,它就可以长成这样

{ "xxx": [ //物料 { "id": "1657928516314136578", "mcode": "xxx",//物料 } ] }

直接把里面的某个字段直接提取到最外面来进行分组,每个map的key值就是这个字段的值,当然如果存在空值还需要额外处理噢 最后也可以通过遍历map进行额外的处理,例如统计某个字段里面有多少数量之类的

//遍历map for (Map.Entry key : listMap.entrySet()) { //通知数量 BigDecimal noticeNum = key.getValue().stream().map(item -> new BigDecimal(item.get("transfer_num").toString())).reduce(BigDecimal.ZERO, BigDecimal::add); //已出库数量 BigDecimal outNum = key.getValue().stream().map(item -> new BigDecimal(item.get("out_store_num").toString())).reduce(BigDecimal.ZERO, BigDecimal::add); //单位 Object unit = key.getValue().get(0).get("unit"); //临时map HashMap tempMap = new HashMap(); //加参数 tempMap.put("noticeNum",noticeNum); tempMap.put("outNum",outNum); tempMap.put("unit",unit); returnMap.put(key.getKey(),tempMap); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3