开发者

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

开发者 https://www.devze.com 2024-10-30 10:22 出处:网络 作者: 听忆.
目录一、概述二、根据指定字段进行分组1、先准备好给前端要封装返回的实体类2、准备好要筛选的数据,我这边是调取的第三方系统做的集成,各位小伙伴一般都是查询数据库3、进行筛选分组并统计 4、最终结果 
目录
  • 一、概述
  • 二、根据指定字段进行分组
    • 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对集合中的对象按指定字段进行分组并统计的文章就介绍到这了,更多相关java stream按指定字段分组统计内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号