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

 更新时间:2024年10月29日 10:09:07   作者:听忆.  
这篇文章主要给大家介绍了关于用java stream对集合中的对象按指定字段进行分组并统计的相关资料,本文主要介绍了如何利用Java的Stream流来实现在list集合中,对具有相同name属性的对象进行汇总计算的需求,需要的朋友可以参考下

一、概述

有这样一个需求,在一个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;
    }

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

4、最终结果 

总结

到此这篇关于用java stream对集合中的对象按指定字段进行分组并统计的文章就介绍到这了,更多相关java stream按指定字段分组统计内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于maven下载慢的问题

    关于maven下载慢的问题

    这篇文章主要介绍了关于maven下载慢的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • SpringBoot环境配置知识总结

    SpringBoot环境配置知识总结

    今天带大家了解SpringBoot环境配置的相关知识,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • mybatisplus下划线驼峰转换的问题解决

    mybatisplus下划线驼峰转换的问题解决

    在mybatis-plus中,下划线-驼峰自动转换可能导致带下划线的字段查询结果为null,本文就来介绍一下mybatisplus下划线驼峰转换的问题解决,感兴趣的可以了解一下
    2024-10-10
  • 使用springboot配置和占位符获取配置文件中的值

    使用springboot配置和占位符获取配置文件中的值

    这篇文章主要介绍了使用springboot配置和占位符获取配置文件中的值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • springboot接收json数据时,接收到空值问题

    springboot接收json数据时,接收到空值问题

    这篇文章主要介绍了springboot接收json数据时,接收到空值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 一文详解为什么越来越多项目开始从JDK 8升级到JDK 21

    一文详解为什么越来越多项目开始从JDK 8升级到JDK 21

    从JDK 8升级到JDK 21,不仅是版本的迭代,更是开发理念与技术栈的全面革新,这篇文章主要介绍了为什么越来越多项目开始从JDK 8升级到JDK 21的相关资料,需要的朋友可以参考下
    2026-01-01
  • 简单了解Spring Bean常用注解的装配

    简单了解Spring Bean常用注解的装配

    这篇文章主要介绍了简单了解Spring Bean常用注解的装配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • java: 程序包com.fasterxml.jackson.annotation不存在的解决办法

    java: 程序包com.fasterxml.jackson.annotation不存在的解决办法

    当我们在导入程序之后,系统给出错误提示:java: 程序包com.fasterxml.jackson.annotation不存在,本文主要介绍了Java程序包不存在的三种解决方法,需要的朋友可以参考下
    2024-02-02
  • 使用Java实现简单的墨水屏点阵图效果

    使用Java实现简单的墨水屏点阵图效果

    点阵图是由称作像素的单个点组成的,这些点可以进行不同的排列和染色以构成图样,本文将使用Java实现简单的墨水屏点阵图效果,需要的小伙伴可以了解下
    2025-09-09
  • Java中StringBuilder常用构造方法解析

    Java中StringBuilder常用构造方法解析

    这篇文章主要介绍了Java中StringBuilder常用构造方法解析,StringBuilder是一个可标的字符串类,我们可以吧它看成是一个容器这里的可变指的是StringBuilder对象中的内容是可变的,需要的朋友可以参考下
    2024-01-01

最新评论