码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java8 Stream 强大功能之统计、汇总、多字段分组和多个列汇总统计【含面试题】


    面试题分享点我直达

    2023最新面试合集链接

    2023大厂面试题PDF

    面试题PDF版本

    java、python面试题

    项目实战:AI文本 OCR识别最佳实践

    AI Gamma一键生成PPT工具直达链接

    玩转cloud Studio 在线编码神器

    玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间

    史上最全文档AI绘画stablediffusion资料分享

    AI绘画关于SD,MJ,GPT,SDXL百科全书

    AI绘画 stable diffusion Midjourney 官方GPT文档 AIGC百科全书资料收集

    AIGC资料包

    在现代Java开发中,Stream API 已经
    成为一个强大的工具,它提供了一种简洁而灵活的方式来处理集合数据。其中,Stream API 统计、汇总、多字段分组和多个列汇总统计是使用频率较高的功能。本文将深入介绍这些功能,并提供一些代码示例。

    一、统计功能:

    1. count():返回流中元素的总数。
    2. min() 和 max():返回流中的最小值和最大值。
    3. average():返回流中元素的平均值。
    4. sum():对流中的元素求和。

    示例代码:

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    
    long count = numbers.stream().count();
    Optional<Integer> max = numbers.stream().max(Integer::compareTo);
    Optional<Integer> min = numbers.stream().min(Integer::compareTo);
    double average = numbers.stream().mapToInt(Integer::intValue).average().orElse(0);
    int sum = numbers.stream().mapToInt(Integer::intValue).sum();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    二、汇总功能:

    1. reduce():将流中的元素进行累积计算,返回一个 Optional 对象。
    2. collect():将流中的元素收集到一个容器对象中,如 List、Set 或 Map。

    示例代码:

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    
    Optional<Integer> sum = numbers.stream().reduce(Integer::sum);
    List<Integer> squaredNumbers = numbers.stream().map(n -> n * n).collect(Collectors.toList());
    Set<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toSet());
    Map<String, List<Integer>> groupByOddEven = numbers.stream().collect(Collectors.groupingBy(n -> n % 2 == 0 ? "Even" : "Odd"));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    三、多字段分组:

    使用 Collectors.groupingBy 方法可以实现对流中元素的多字段分组。

    示例代码:

    class Person {
        private String name;
        private int age;
        private String gender;
    
        // 省略构造函数和 Getter/Setter 方法
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", gender='" + gender + '\'' +
                    '}';
        }
    }
    
    List<Person> people = Arrays.asList(
            new Person("Alice", 20, "Female"),
            new Person("Bob", 30, "Male"),
            new Person("Charlie", 25, "Male"),
            new Person("David", 22, "Male"),
            new Person("Eva", 28, "Female"),
            new Person("Frank", 35, "Male")
    );
    
    Map<String, List<Person>> byGender = people.stream().collect(Collectors.groupingBy(Person::getGender));
    Map<Integer, List<Person>> byAge = people.stream().collect(Collectors.groupingBy(Person::getAge));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    四、多个列汇总统计:

    使用 Collectors.groupingBy 方法结合 Collectors.summarizingInt 方法可以实现对流中元素的多个列进行汇总统计。

    示例代码:

    class Product {
        private String category;
        private String name;
        private int price;
        private int quantity;
    
        // 省略构造函数和 Getter/Setter 方法
    
        @Override
        public String toString() {
            return "Product{" +
                    "category='" + category + '\'' +
                    ", name='" + name + '\'' +
                    ", price=" + price +
                    ", quantity=" + quantity +
                    '}';
        }
    }
    
    List<Product> products = Arrays.asList(
            new Product("Electronics", "Laptop", 2500, 5),
            new Product("Electronics", "Phone", 800, 3),
            new Product("Clothing", "Shirt", 40, 10),
            new Product("Clothing", "Pants", 60, 8),
            new Product("Books", "Java in Action", 50, 15),
            new Product("Books", "Clean Code", 80, 12)
    );
    
    Map<String, IntSummaryStatistics> statsByCategory = products.stream().collect(Collectors.groupingBy(Product::getCategory, Collectors.summarizingInt(Product::getQuantity)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    首家!亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试
    Linux学习-63-源码包服务管理方法
    Android 11.0 根据包名授予WRITE_SETTINGS权限
    Apache Pulsar 系列 —— 深入理解 Bookie GC 回收机制
    dubbo异步调用三种方式
    Windows系统提示“ping”不是内部或外部命令,也不是可运行的程序或批处理文件解决办法
    自媒体赚钱方式有哪些?如何高效运营自媒体
    黑客嫌100万美元太少,上市企业敏感数据遭泄露
    PPT文件转换成PDF格式
    定时器设计--红黑树
  • 原文地址:https://blog.csdn.net/weixin_42373241/article/details/132827786
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号