Java8 Stream 一行代码实现数据分组统计、排序、最大值、最小值、平均值、总数、合计

程序员蜗牛g 2023-10-23 21:38 发表于江苏

点击上方“程序员蜗牛g”,选择“设为星标”

跟蜗牛哥一起,每天进步一点点

程序员蜗牛g

大厂程序员一枚 跟蜗牛一起 每天进步一点点

9篇原创内容

公众号

Java 8 对数据处理可谓十分流畅,既不改变数据,又能对数据进行很好的处理,今天给大家演示下,用Java 8 的 Stream 如何对数据进行分组统计,排序,求和等

这些方法属于Java 8的汇总统计类:

  • getAverage(): 它返回所有接受值的平均值。

  • getCount(): 它计算所有元素的总数。

  • getMax(): 它返回最大值。

  • getMin(): 它返回最小值。

  • getSum(): 它返回所有元素的总和。

示例:统计用户status的最大值,最小值,求和,平均值

看官可以根据自己的需求进行灵活变通

@GetMapping("/list")
public void list(){
    List<InputForm> inputForms = inputFormMapper.selectList();
    Map<String, IntSummaryStatistics> collect = inputForms.stream()
        .collect(Collectors.groupingBy(InputForm::getCreateUserName, Collectors.summarizingInt(InputForm::getStatus)));

    // 对名字去重
    Set<String> collect1 = inputForms.stream().distinct().map(InputForm::getCreateUserName).collect(Collectors.toSet());

    // 遍历名字,从map中取出对应用户的status最大值,最小值,平均值。。。
    for (String s1 : collect1) {
        IntSummaryStatistics statistics1 = collect.get(s1);

        System.out.println("第一个用户的名字为====" + s1);
        System.out.println("**********************************************");
        System.out.println("status的个数为===" + statistics1.getCount());
        System.out.println("status的最小值为===" + statistics1.getMin());
        System.out.println("status的求和为===" + statistics1.getSum());
        System.out.println("status的平均值为===" + statistics1.getAverage());
        System.out.println();
        System.out.println();
    }
}

结果如下:

图片

分组统计:

@GetMapping("/list")
public void list(){
    List<InputForm> inputForms = inputFormMapper.selectList();
    System.out.println("inputForms = " + inputForms);

    Map<String, Long> collect = inputForms.stream().collect(Collectors.groupingBy(InputForm::getCreateUserName,
        Collectors.counting()));
    
    System.out.println("collect = " + collect);
}

其中Collectors.groupingBy(InputForm::getCreateUserName, Collectors.counting())返回的是一个Map集合,InputForm::getCreateUserName代表key,Collectors.counting()代表value,我是按照创建人的姓名进行统计

可以看到总共有九条数据,其中莫xx有两个,周xx有七个

如果我们想看某个部门下面有哪些数据,可以如下代码

@GetMapping("/list")
public Map<String, List<InputForm>> list(){
    List<InputForm> inputForms = inputFormMapper.selectList();
    System.out.println("inputForms = " + inputForms);

    Map<String, List<InputForm>> collect = inputForms.stream()
        .collect(Collectors.groupingBy(InputForm::getCreateCompanyName));

    return collect;
}

图片

求最大值,最小值

@GetMapping("/list")
public Map<String, List<InputForm>> list(){
    List<InputForm> inputForms = inputFormMapper.selectList();
    System.out.println("inputForms = " + inputForms);

    Optional<InputForm> min = inputForms.stream()
        .min(Comparator.comparing(InputForm::getId));

    System.out.println("min = " + min);
    return null;
}

图片

可以看到此id是最小的,最大值雷同

对某个字段求最大,最小,求和,统计,计数

@GetMapping("/list")
public void list(){
    List<InputForm> inputForms = inputFormMapper.selectList();
    System.out.println("inputForms = " + inputForms);

    IntSummaryStatistics collect = inputForms.stream()
        .collect(Collectors.summarizingInt(InputForm::getStatus));
    double average = collect.getAverage();
    int max = collect.getMax();
    int min = collect.getMin();
    long sum = collect.getSum();
    long count = collect.getCount();
    
    System.out.println("collect = " + collect);
}

求最大值,最小值还可以这样做

// 求最大值
Optional<InputForm> max = inputForms.stream().max(Comparator.comparing(InputForm::getAgency));
if (max.isPresent()){
    System.out.println("max = " + max);
}

// 求最小值
Optional<InputForm> min = inputForms.stream().min(Comparator.comparing(InputForm::getAgency));
if (min.isPresent()){
    System.out.println("min = " + min);
}

对某个字段求和并汇总

int sum = inputForms.stream().mapToInt(InputForm::getStatus).sum();
        System.out.println("sum = " + sum);

求某个字段的平均值

// 求某个字段的平均值
Double collect2 = inputForms.stream().collect(Collectors.averagingInt(InputForm::getStatus));
System.out.println("collect2 = " + collect2);

// 简化后
OptionalDouble average = inputForms.stream().mapToDouble(InputForm::getStatus).average();
if (average.isPresent()){
    System.out.println("average = " + average);
}

拼接某个字段的值,可以设置前缀,后缀或者分隔符

// 拼接某个字段的值,用逗号分隔,并设置前缀和后缀
String collect3 = inputForms.stream().map(InputForm::getCreateUserName).collect(Collectors.joining(",", "我是前缀", "我是后缀"));
System.out.println("collect3 = " + collect3);

根据部门进行分组,并获取汇总人数

// 根据部门进行汇总,并获取汇总人数
Map<String, Long> collect4 = inputForms.stream().collect(Collectors.groupingBy(InputForm::getCreateDeptName, Collectors.counting()));
System.out.println("collect4 = " + collect4);

根据部门和是否退休进行分组,并汇总人数

// 根据部门和是否退休进行分组,并汇总人数
Map<String, Map<Integer, Long>> collect5 = inputForms.stream().collect(Collectors.groupingBy(InputForm::getCreateDeptName, Collectors.groupingBy(InputForm::getIsDelete, Collectors.counting())));
System.out.println("collect5 = " + collect5);

根据部门和是否退休进行分组,并取得每组中年龄最大的人

// 根据部门和是否退休进行分组,并取得每组中年龄最大的人
Map<String, Map<Integer, InputForm>> collect6 = inputForms.stream().collect(
    Collectors.groupingBy(InputForm::getCreateDeptName,
        Collectors.groupingBy(InputForm::getIsDelete,
            Collectors.collectingAndThen(
                Collectors.maxBy(
                    Comparator.comparing(InputForm::getAge)), Optional::get))));
System.out.println("collect6 = " + collect6);

即使复杂的统计逻辑,只要有数据,就能够通过Java 8的Stream,一行代码搞定,从此就可以告别繁琐的 for 循环汇总了...

来源:blog.csdn.net/xiaoheihai666/

article/details/128152182

竹林幽深
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java stream 多情况分组统计最值
醉逸鎏年的博客
05-29 1万+
Java stream 多情况分组统计最值
JAVA8 stream中三个参数的reduce方法对List进行分组统计操作
09-07
主要介绍了JAVA8 stream中三个参数的reduce方法对List进行分组统计操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Java实现分组操作:groupBy的实用指南
最新发布
weixin_41280893的博客
08-21 502
数据处理过程中,分组操作(groupBy)是一个常见且重要的任务。它允许我们根据某个属性将数据集合划分为多个子集,然后对这些子集分别进行操作。在Java中,尽管没有像SQL那样直接的groupBy语句,但可以通过多种方法实现类似的功能。本文将介绍如何在Java实现groupBy操作,并演示其在实际开发中的应用。一、为什...
Java8 Stream根据某字段分组统计
liuerchong的博客
03-27 2379
代码Java8 Stream根据某字段分组、多字段求和。
stream 进行分组统计
For_Reak的博客
04-10 9123
对一个list中的元素进行分组,并统计各个元素出现的次数。放入map&lt;String,Long&gt;。
stream进行分组统计
易的博客
04-12 1万+
// //groupingBy分组 // Map<Integer, Long> map = houseList.stream().collect(Collectors.groupingBy(House::getBuildId, Collectors.counting())); // //控制台输出map // map.forEach((k,v)->{ // System.out.println("k="+k+",v="+v); // }); // // //方.
java8 stream统计、汇总、多字段分组、多个列汇总统计
az44yao的专栏
11-03 7356
静态工厂方法:Collectors.groupingBy(),以及Collectors.groupingByConcunrrent(),给我们提供了类似SQL语句中的"GROUP BY"的功能。上面的代码,讲每个BlogPost实例映射为了其对应的标题,然后把博客标题的stream连接成了成了字符串,形如“Post titles:[标题1,标题2,标题3]”。注意:maxBy和minBy都考虑了当第一次分组得到的结果是空的场景,因此其返回结果(Map的value)是Optional<BlogPost>。
java1.8 中 stream 的 groupingBy 最大值最小值分组
05-20
主要是介绍在 JDK8中使用 stream 流的 groupingBy 方法源进行最大值分组最小值分组平均值分组统计分组
java8 stream自定义分组求和并排序实现
08-25
Java8 Stream 自定义分组求和并排序实现Java8 中一个非常重要的知识点,该知识点的实现可以帮助开发者快速地实现分组求和并排序的操作,从而提高开发效率和代码质量。 Java8 Stream 的主要特点是可以对集合...
java代码-最大值最小值平均值
07-15
Java编程中,计算一组数值数据最大值最小值平均值是常见的任务,尤其在数据分析、统计计算或处理用户输入等场景。本项目提供的`main.java`文件和`README.txt`文件很可能是用来演示如何用Java实现这些功能。...
java中使用stream()流实现排序、去重、分组、查询和最小值以及最大值平均值
shakdkxl的博客
12-07 1658
1、使用forEach()遍历List package com.example.demo.util; import lombok.Data; @Data public class Person { private int id; private String name; private int age; private String sex; private String classroom; public Person(int id, String name, in.
java8 集合 多字段 分组 统计个数代码
09-07
主要介绍了java8 集合 多字段 分组 统计个数代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java代码-40 谢家俊 最大值最小值平均值
07-15
在这个项目中,“java代码-40 谢家俊 最大值最小值平均值”很可能是针对这样一个场景:编写了一个Java程序,用于处理一组数值,找出它们中的最大值最小值,并计算平均值。下面我们将深入探讨如何在Java实现这些...
Java8 Stream流 Collectors.groupingBy 分组统计详解
顶顶顶顶顶顶顶顶顶顶顶顶
08-09 212
代码Java8 Stream流 Collectors.groupingBy 分组统计详解。
Stream分组统计,求和
az44yao的专栏
11-02 3094
public class Test { public static void main(String[] args) { List<OrdersDO> list = new ArrayList<>();//查询昨天一天的所有交易 OrdersDO o1 = new OrdersDO(); o1.setAppId(1L); o1.setTradeAmount(100L); o1.setStatus(1); list.add(o1); OrdersDO o2 = new Orders.
java对对象进行分组统计
花椒胡椒小辣椒的个人博客
01-10 519
原来需要: Map<String, List<Employee>> result = new HashMap<>(); for (Employee e : employees) { String city = e.getCity(); List<Employee> empsInCity = result.get(city); if (em...
Java8用Stream一行代码实现数据分组统计排序最大值最小值平均值总数合计
热门推荐
xiaoheihai666的博客
12-02 2万+
Java8对数据处理可谓十分流畅,既不改变数据,又能对数据进行很好的处理,今天给大家演示下,用Java8的Stream如何对数据进行分组统计排序,求和等汇总统计方法找到汇总统计的方法。这些方法属于java 8的汇总统计类。getAverage(): 它返回所有接受值的平均值。getCount(): 它计算所有元素的总数。getMax(): 它返回最大值。getMin(): 它返回最小值。getSum(): 它返回所有元素的总和。看官可以根据自己的需求进行灵活变通。
java分组统计工具类
weixin_39956506的博客
02-05 526
java分组统计数据工具类
写文章

热门文章

  • 如何查看MySQL的版本? 154079
  • BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理) 101934
  • 学习资料网址 27887
  • 百度云干货资源 26144
  • NFS文件无法写入的权限问题 23225

分类专栏

  • java 644篇
  • oracle 62篇
  • linux 42篇
  • 数据库 118篇
  • jquery 33篇
  • web 15篇
  • json 13篇
  • xml 15篇
  • sqlserver 20篇
  • mysql 51篇
  • 2篇
  • ztree 3篇
  • dom4j 6篇
  • cxf 1篇
  • webservice 5篇
  • struts2 5篇
  • ibatis
  • hibernate 10篇
  • spring 20篇
  • ant
  • freemark 3篇
  • extjs 3篇
  • spket 1篇
  • svn 5篇
  • window 2篇
  • 其他 2篇
  • Exception 1篇
  • 邮件 2篇
  • javamail 4篇
  • 浏览器 1篇
  • js 27篇
  • javascript 22篇
  • web服务 2篇
  • soap 1篇
  • apache
  • 正则表达式 14篇
  • easyui 1篇
  • html5 3篇
  • css 3篇
  • 日期 3篇
  • Lucene
  • 看书笔记 11篇
  • 开发积累 153篇
  • 程序算法 6篇
  • 系统设计 1篇
  • 开发模式
  • 总结 3篇
  • Uml
  • flex
  • SSH
  • 开发工具 1篇
  • 报表开发
  • 存储过程 3篇
  • 游标
  • RedHat 1篇
  • Tomcat 3篇
  • http协议 6篇
  • mybatis 9篇
  • maven 17篇
  • 百度地图 8篇
  • map 7篇
  • 地图 api 9篇
  • 百度地图api 6篇
  • Android开发 3篇
  • Tomcat
  • Regex
  • 微信公共平台 4篇
  • Html编辑器 1篇
  • struts1
  • mysql 4篇
  • BAE
  • BAE开放平台
  • css
  • springSecurity3 8篇
  • SpringMVC 18篇
  • 设计模式 1篇
  • java基础 1篇
  • Shiro 3篇
  • javaCV 1篇
  • openCV 1篇
  • 服务器 11篇
  • Tomcat
  • WebLogic
  • nginx 2篇
  • redis 9篇
  • dubbo 3篇
  • Memcached
  • 工具类 26篇
  • 线程 4篇

最新评论

  • Spring Boot3.3 项目数据库连接使用SM4国密加密算法进行脱敏配置

    m0_63162375: aliyun-java-sdk-core还有国密加密算法的功能吗

  • SpringBoot 3.3 + Ollama 实现基于通义千问Qwen-2模型的EventStream数据解析

    2401_85452233: 前辈,请问这里的代码是全的么

  • redission的看门狗失效问题

    小艾的博客: “// 拿锁失败时会不停的重试” 这种注释就是误人子弟

  • [开源]一个技术自主可控即时IM通讯系统,适于私有化部署 支持全端

    忘川一渡人: 打着开源的幌子收费

  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    JohnsonSmile: 原型模式是通过拷贝复制原有对象来创建一个新对象,可spring的prototype是通过构造方法来创建,这不能算原型模式吧,只是叫了prototype而已

大家在看

  • 【Linux】-权限 1024
  • MyBatisPlus搭建
  • 每次都这样,我不写标题总可以了吧 718
  • 器件(二):一文读懂碳化硅MOSFET 190
  • 【开题报告】基于django+vue江服服饰陈列馆管理系统(论文+源码)计算机毕业设计 891

最新文章

  • 开源商城 订单分账怎么设计
  • Spring Boot 接口数据加解密,太方便了!
  • 美团二面:如何在10亿级别用户中检查用户名是否存在?
2024
10月 18篇
09月 22篇
08月 55篇
07月 45篇
06月 7篇
05月 17篇
04月 58篇
03月 50篇
02月 36篇
01月 164篇
2023年816篇
2022年118篇
2021年89篇
2020年106篇
2019年132篇
2018年61篇
2017年134篇
2016年51篇
2015年51篇
2014年123篇
2013年209篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家巩义城市玻璃钢雕塑深圳艺术商场美陈玻璃钢雕塑厂家信息珠海玻璃钢雕塑厂户内玻璃钢雕塑批发云南商场节庆美陈雕塑加工温州玻璃钢陶瓷雕塑通渭玻璃钢雕塑生产厂家江苏商场美陈订购嘉兴玻璃钢雕塑订做价格玻璃钢大象雕塑 雕塑铜狮子厂家信誉好的玻璃钢恐龙雕塑玻璃钢雕塑一平米价格济宁玻璃钢花盆雕塑价格玻璃钢雕塑需要喷亮油吗上海黑白玻璃钢花盆江阴商场中庭美陈河源玻璃钢卡通雕塑玉泉区玻璃钢仿铜雕塑海南玻璃钢雕塑灯厂家天津精巧玻璃钢座椅雕塑气球商场美陈服务热线树脂玻璃钢雕塑工业常州玻璃钢恐龙雕塑江苏生肖玻璃钢雕塑常州玻璃钢鹿雕塑厂家玻璃钢雕塑厂平台费用多少河南节庆商场美陈报价韶关玻璃钢动物雕塑供应商秦皇岛玻璃钢广场雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化