当前位置: 首页 > news >正文

使用java stream对集合中的对象按指定字段进行分组并统计

一、概述

有这样一个需求,在一个list集合中的对象有相同的name,我需要把相同name的对象进行汇总计算。使用java stream来实现这个需求,这里做一个记录,希望对有需求的同学提供帮助

 一、根据指定字段进行分组

一、先准备好给前端要封装返回的实体类

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;}public void setTotal(Integer total) {this.total = total;}
}

 二、准备好要筛选的数据,我这边是调取的第三方系统做的集成,各位小伙伴一般都是查询数据库

JSONObject jsonObject = JSON.parseObject(sync);JSONObject data = jsonObject.getJSONObject("data");List<ColthType> records = data.getList("records", ColthType.class);

三、进行筛选分组并统计 

List<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();List<ColthType> 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());

四、最终结果 

 

 

 

http://www.lryc.cn/news/391021.html

相关文章:

  • 03.C1W2.Sentiment Analysis with Naïve Bayes
  • 一个强大的分布式锁框架——Lock4j
  • HarmonyOS - 通过.p7b文件获取fingerprint
  • vue3实现echarts——小demo
  • Python 项目依赖离线管理 pip + requirements.txt
  • jdk动态代理代码实现
  • mybatis的xml如何使用java枚举
  • SQL Server中设置端口号
  • CSS Border(边框)
  • 【鸿蒙学习笔记】@Prop装饰器:父子单向同步
  • 设计模式(实战项目)-状态模式
  • 【python】OpenCV—Color Map
  • MySQL:表的内连接和外连接、索引
  • Chrome备份数据
  • visual studio远程调试
  • if __name__ == “__main__“
  • 数据识别概述
  • pytorch统计学分布
  • 【网络安全学习】漏洞利用:BurpSuite的使用-03-枚举攻击案例
  • redis 消息订阅命令
  • springboot接口防抖【防重复提交】
  • 每日一题——Python实现PAT乙级1026 程序运行时间(举一反三+思想解读+逐步优化)五千字好文
  • 还在Excel中管理您的持续改进项目吗?
  • CentOS 7 内存占用过大导致 OOM Killer 杀掉了 Java 进程
  • 在postgrel中使用hints
  • OceanBase Meetup北京站|跨行业应用场景中的一体化分布式数据库:AI赋能下的探索与实践
  • Spring Boot:轻松设置全局异常处理
  • Omni3D目标检测
  • 前端三件套开发模版——产品介绍页面
  • Android Bitmap 和Drawable的区别