java stream流之groupby的用法

简单分组
  • 按照年龄对 Person 对象进行分组:
  1. 代码示例
import java.util.*;
import java.util.stream.Collectors;public class SimpleGrouping {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));// 通过对age字段进行分组,得到相同年龄的people对象listMap<Integer, List<Person>> groupedByAge = people.stream().collect(Collectors.groupingBy(Person::getAge));groupedByAge.forEach((age, personList) -> {System.out.println("Age: " + age);personList.forEach(person -> System.out.println(person));});}
}
  1. 输出结果
Age: 25
Person{name='Bob', age=25}
Person{name='David', age=25}
Age: 30
Person{name='Alice', age=30}
Person{name='Charlie', age=30}
Age: 35
Person{name='Eve', age=35}

分组并统计

  • 按年龄分组并统计每个年龄段的人数:
  1. 代码示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingAndCounting {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));// 通过对年龄字段进行分组,然后对分组后的数据进行统计Map<Integer, Long> countByAge = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.counting()));countByAge.forEach((age, count) -> {System.out.println("Age: " + age + ", Count: " + count);});}
}
  1. 数据结果
Age: 25, Count: 2
Age: 30, Count: 2
Age: 35, Count: 1

分组并进行数据转换

  • 按年龄分组,并将每组中的 Person 对象转换为姓名列表:
  1. 代码示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingAndMapping {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, List<String>> namesByAge = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.mapping(Person::getName, Collectors.toList())));namesByAge.forEach((age, names) -> {System.out.println("Age: " + age + ", Names: " + names);});}
}
  1. 输出结果
Age: 25, Names: [Bob, David]
Age: 30, Names: [Alice, Charlie]
Age: 35, Names: [Eve]

多级分组

  • 先按年龄分组,再按姓名的首字母进行分组:
  1. 示例代码

import java.util.*;
import java.util.stream.Collectors;public class MultiLevelGrouping {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, Map<Character, List<Person>>> multiLevelGrouping = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.groupingBy(person -> person.getName().charAt(0))));multiLevelGrouping.forEach((age, group) -> {System.out.println("Age: " + age);group.forEach((initial, persons) -> {System.out.println("  Initial: " + initial);persons.forEach(person -> System.out.println("    " + person));});});}
}
  1. 输出结果
Age: 25Initial: BPerson{name='Bob', age=25}Initial: DPerson{name='David', age=25}
Age: 30Initial: APerson{name='Alice', age=30}Initial: CPerson{name='Charlie', age=30}
Age: 35Initial: EPerson{name='Eve', age=35}

分组并收集到不同的集合

  • 按年龄分组,并将每组中的 Person 对象收集到 Set 中:
  1. 代码示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingToSet {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, Set<Person>> groupedByAgeToSet = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.toSet()));groupedByAgeToSet.forEach((age, personSet) -> {System.out.println("Age: " + age);personSet.forEach(person -> System.out.println(person));});}
}
  1. 输出结果
Age: 25
Person{name='Bob', age=25}
Person{name='David', age=25}
Age: 30
Person{name='Alice', age=30}
Person{name='Charlie', age=30}
Age: 35
Person{name='Eve', age=35}

自定义收集器

  • 按年龄分组,并计算每组的平均年龄:
  1. 代码示例
import java.util.*;
import java.util.stream.Collectors;public class GroupingWithCustomCollector {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 25),new Person("Charlie", 30),new Person("David", 25),new Person("Eve", 35));Map<Integer, Double> averageAgeByGroup = people.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.averagingInt(Person::getAge)));averageAgeByGroup.forEach((age, avgAge) -> {System.out.println("Age: " + age + ", Average Age: " + avgAge);});}
}
  1. 输出结果
Age: 25, Average Age: 25.0
Age: 30, Average Age: 30.0
Age: 35, Average Age: 35.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上市即交付,比亚迪秦L DM-i万人交车暨千媒众测开营

6月6日&#xff0c;“引领中级 开创油耗2时代”秦L DM-i万人交车暨千媒众测开营仪式在比亚迪大本营深圳盛大举行。 众多车主代表亲临现场&#xff0c;与全国各地的比亚迪4S店千店联动&#xff0c;将秦L DM-i全国交付推向新的高潮。发布即量产&#xff0c;上市即交付&#xff0…

ESP32:FreeRTOS节拍配置(vTaskDelay延时10ms改为1ms)

文章目录 背景方法手动修改sdkconfig通过idf.py menuconfig 背景 在FreeRTOS的默认配置中&#xff0c;任务调度的频率默认是100HZ&#xff0c;因此默认vTaskDelay默认延时是10ms。 FreeRTOS 的系统时钟节拍可以在配置文件 FreeRTOSConfig.h 里面设置&#xff1a;#define confi…

【HarmonyOS】鸿蒙应用子模块module资源如何获取

【HarmonyOS】鸿蒙应用子模块module资源如何获取 一、问题背景&#xff1a; 在多模块项目工程中&#xff0c;单个模块的资源不会放在主模块中&#xff0c;所以我们需要在子模块中访问自己的资源。如果使用默认的资源获取api&#xff0c;会提示找不到资源。 那如何获取子模块下…

【AI基础】第四步:保姆喂饭级-langchain+chatglm2-6b+m3e-base

在第三步手动安装chatglm2-6b时&#xff0c;已经可以通过web进行交互。langchain重新封装了一下AI框架&#xff0c;提供更加友好的开发功能&#xff0c;类似于AI届的spring框架。langchain的安装过程也类似于上一步说的&#xff1a;【AI基础】第三步&#xff1a;纯天然手动安装…

负载均衡

文章目录 负载均衡的分类负载均衡的算法 负载均衡的分类 对链路的负载均衡 对链路的负载均衡主要是指应用方有多条ISP网络出口,比方说电信网通,电信铁通等,对链路的负载均衡也是解决目前电信网通互联互通的最专业的技术.其实现的原理是根据负载均衡算法来算出,到目标地址的数据…

企业获客有哪些好的广告推广拓客渠道?

在这个数字化营销的时代&#xff0c;企业要想在激烈的市场竞争中脱颖而出&#xff0c;选择正确的广告宣传渠道至关重要。随着互联网技术的飞速发展&#xff0c;各类媒体平台如雨后春笋般涌现&#xff0c;为企业提供了广阔的宣传空间。云衔科技通过多元化的媒体渠道&#xff0c;…

485数据采集模块

在工业自动化与智能化的浪潮中&#xff0c;数据采集作为整个系统的基础和核心&#xff0c;其准确性和实时性直接关系到生产效率和产品质量。而485数据采集模块&#xff0c;作为连接现场设备与上位机的重要桥梁&#xff0c;其性能与稳定性对于整个系统的运行至关重要。HiWoo Box…

【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图

前天写了篇博文讲到用PlantUML来绘制C类图和流程图。后台有读者留言&#xff0c;问这步能否自动化生成&#xff0c;不想学习 PlantUML 语法。 我想了下&#xff0c;发现这事可行&#xff0c;确实可以做到通过自然语言的描述就能实现 UML图的绘制&#xff0c;昨天晚上加了个班到…

B站播放数量如何实现,高并发读写计数难点

我们先不考虑用户规模、并发量、性能、可靠性… 这些东西 我们就单单从功能层面实现统计视频播放量&#xff0c;其实很简单&#xff0c; 就是给视频表加一个字段&#xff0c;用来表示播放量 这样实现&#xff0c;最大的好处就是简单&#xff0c;但是我们马上就能发现一个非常严…

Vue 组件之间的通信

在 Vue.js 中&#xff0c;组件是构建应用程序的基本单位。然而&#xff0c;当你的应用程序变得复杂时&#xff0c;组件之间的通信变得至关重要。本文将介绍几种 Vue 组件之间通信的方式&#xff0c;帮助你更好地管理和组织代码。 父子组件通信 父组件可以通过 props 向子组件传…

离线下载安装TTS的步骤

要离线下载安装 TTS 模块&#xff0c;需要先在有网络的环境下下载所有所需的依赖项&#xff0c;然后将这些文件转移到目标环境中进行安装。以下是具体步骤&#xff1a; 步骤 1&#xff1a;在有网络的环境下下载依赖项 创建一个目录来存放下载的包&#xff1a; mkdir TTS_deps下…

在线标注流程

文章目录 在线标注流程标注方法 在线标注流程 登录地址&#xff1a;http://7a27c5e078f644a2a9b734603913c65e.login.bce.baidu.com 出现页面&#xff1a; 登录名&#xff1a; 三个中任意一个 密码&#xff1a;ZNSJ123a 登录之后叉掉。再打开这个网站&#xff1a;https://…

【ZYNQ】CPU 私有定时器

Zynq 的每个 Cortex-A9 处理器都有自己的专用 32 位定时器和 32 位看门狗定时器&#xff0c;两个处理器共享一个全局 64 位定时器&#xff0c;这些计时器的时钟频率始终为 CPU 频率的 1/2。本文主要介绍 Zynq 芯片 CPU 私有定时器的工作特性&#xff0c;以及私有定时器的基本使…

selenium中,如何使用选择框

html5 一个多选下拉框&#xff0c;没有默认选 一个单选下拉狂&#xff0c;默认“张桐桐” <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>选择框</title> </head> <body><l…

我是大学生,应该选系统运维方向,还是web开发方向?

选择系统运维方向还是Web开发方向取决于你的兴趣、职业目标和个人技能。以下是对这两个方向的详细对比和建议&#xff0c;帮助你做出更明智的选择 双方比较 &#x1f926;‍♀️系统运维方向 优点&#xff1a; 稳定性&#xff1a;系统运维工作通常比较稳定&#xff0c;许多…

【Power Compiler手册】5.Verilog翻转活动示例

Verilog切换活动示例 以下示例展示了使用Verilog进行RTL(寄存器传输级)和门级描述时生成的切换活动数据。 RTL示例 这个Verilog RTL示例包括以下内容: RTL设计描述:定义了电路的功能和行为,但不涉及具体的门级实现细节。RTL测试台(testbench):用于仿真和测试RTL设计…

【问题复盘】第三方接口变慢导致服务崩溃

一、事件经过 -1、一个不在公司的下午&#xff0c;接到客户投诉&#xff0c;说平台不能访问了。 0、介入调查&#xff0c;发现服务器http请求无法访问&#xff0c;https请求却可以正常访问&#xff0c;一时有些无法理解&#xff1b;&#xff08;后来发现&#xff0c;http和htt…

在gateway网关中使用feign远程调用

由于 gateway 采用 spring-boot-starter-webflux 异步的 web 组件&#xff0c;该组件和 spring-boot-starter-web 有较大区别&#xff0c;我们的 openFeign 对 spring-boot-starter-web 比较契合&#xff0c;而对于 前者则需要做一些适配。 编写如下配置类 SpringBootConfigur…

网络编程(八)

网络编程&#xff08;八&#xff09; 数据库数据库的分类基于嵌入式的数据库什么是SQLite?为什么使用SQLite?sqlite3数据库的安装 sqlite3中的点命令.open 数据库文件名字.tables [数据库文件名].schema 表名.database.quit.head on.mode column SQLite数据库中的数据类型SQL…

《混凝土坝安全监测资料整编规程》的深入解读与实际应用

在水利工程中&#xff0c;混凝土坝作为重要的建筑物&#xff0c;其安全监测工作至关重要。为了确保监测工作的准确性和有效性&#xff0c;制定一套规范的混凝土坝安全监测资料整编规程显得尤为重要。本文将对《混凝土坝安全监测资料整编规程》进行深入解读&#xff0c;并探讨其…