教你用java stream对集合中的对象按指定字段进行分组并统计
目录
- 一、概述
- 二、根据指定字段进行分组
- 1、先准备好给前端要封装返回的实体类
- 2、准备好要筛选的数据,我这边是调取的第三方系统做的集成,各位小伙伴一般都是查询数据库
- 3、进行筛选分组并统计
- 4、最终结果
- 总结
一、概述
有这样一个需求,在一个list集合中的对象有相同的name,我需要把相同name的对象进行汇总计算。使用Java stream来实现这个需求,这里做一个记录,希望对有需求的同学提供帮助
二、根据指定字段进行分组
1、先准备好给前端要封装返回的实体类
package com.tingyi.pojo; import lombok.*; @Data @AllArgsConstructor @NoArgsConstructor public class ColthTypeVo { //所指定的字段 private String name; //统计的数量 private Integer total; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getTotal() { return total; php } public void setTotal(Integer total) { this.total = total; } }
2、准备好要筛选的数据,我这边是调取的第三方系统做的集成,各位小伙伴一般都是查询数据库
jsONObject jsonObject = JSON.parseobject(sync); JSONObject data = jsonObject.getJSONObject("data"); List<ColthType> records = data.getList("records", ColthType.class);
3、进行筛选分组并统计
List&javascriptlt;ColthTypeVo> collect = records.stream() //这边建议将这个字段过滤一下 不能为空 .filter(l->!StringUtils.isEmpty(l.getCarTypeName())) //如果为空的话 这里分组会报错 key is null .collect(Collectors.groupingBy(ColthType::getCarTypeName)) .entrySet() .stream() .map(c -> { String key = c.getKey(); python List<ColthTphpype> value = c.getValue(); Integer size = value.size(); ColthTypeVo colthTypeVo = new ColthTypeVo(); colthTypeVo.setName(key); colthTypeVo.setTotal(size); return colthTypeVo; //小伙伴要注意 这里不可以直接 new ColthTypeVo().setName(key); 可能会因为返回值为void爆红 void不支持链式调用编程 }).collect(Collectors.toList());
4、最终结果
总结
到此这篇关于用java stream对集合中的对象按指定字段进行分组并统计的文章就介绍到这了,更多相关java stream按指定字段分组统计内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论