导航
电话
咨询
地图
顶部
java 8引入的stream api为集合操作带来了极大的便利。要统计集合中特定属性的出现次数,我们主要依赖以下两个collectors:
当两者结合使用时,groupingBy会根据分类函数将元素分组,然后counting会统计每个分组中的元素个数,最终返回一个Map,其中K是分类键,Long是对应的计数。
为了更好地演示,我们将原始的List>数据结构转换为更符合Java编程习惯的POJO。这不仅提高了类型安全性,也使代码更易于理解和维护。
首先,创建一个FamilyMember类来表示每个家庭成员的详细信息。
import java.time.LocalDate; public class FamilyMember { private String memberType; // 家庭成员类型,如"Sibling", "Child", "Spouse" private String fullName; private LocalDate dateOfBirth; private String gender; public FamilyMember(String memberType, String fullName, LocalDate dateOfBirth, String gender) { this.memberType = memberType; this.fullName = fullName; this.dateOfBirth = dateOfBirth; this.gender = gender; } // Getters for all fields are essential for Stream operations public String getMemberType() { return memberType; } public String getFullName() { return fullName; } public LocalDate getDateOfBirth() { return dateOfBirth; } public String getGender() { return gender; } // Setters can be added if needed, but not strictly for this counting example }
说明: FamilyMember类封装了家庭成员的属性。其中,memberType是我们希望进行计数的关键属性。为了让Collectors.groupingBy能够访问到这个属性,必须提供相应的getter方法(getMemberType())。
接下来,在主程序中创建FamilyMember对象列表,并使用Stream API进行计数。
import java.time.LocalDate; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class MemberCounter { public static void main(String[] args) { // 模拟数据:创建家庭成员列表 List listOfFamilyMember = Arrays.asList( new FamilyMember("Sibling", "Sibling name", LocalDate.of(1990, 12, 12), "Male"), new FamilyMember("Sibling", "Sibling name2", LocalDate.of(1990, 12, 12), "Male"), new FamilyMember("Sibling", "Sibling name3", LocalDate.of(1990, 12, 12), "Male"), new FamilyMember("Child", "Child name", LocalDate.of(2010, 12, 12), "Male"), new FamilyMember("Child", "Child name2", LocalDate.of(2000, 12, 12), "Female"), new FamilyMember("Spouse", "Spouse name", LocalDate.of(1990, 12, 12), "Male") ); // 使用Stream API统计各类家庭成员的数量 Map countMembers = listOfFamilyMember.stream() .collect(Collectors.groupingBy(FamilyMember::getMemberType, Collectors.counting())); // 打印结果 System.out.println("家庭成员类型统计结果: " + countMembers); } }
代码解析:
执行上述代码,将得到如下输出:
家庭成员类型统计结果: {Spouse=1, Sibling=3, Child=2}
这个Map清晰地展示了每种家庭成员类型的出现次数。
Java 8 Stream API结合Collectors.groupingBy和Collectors.counting为统计集合中特定属性的出现次数提供了一个强大、简洁且富有表达力的解决方案。通过采用POJO作为数据模型,可以进一步提升代码的健壮性和可维护性。掌握这一模式,将极大地提高你在Java中处理数据聚合任务的效率。
# ai # 封装 # 这是 # 并发 # function # Lambda # 家庭成员 # 对象 # Java # String # 推荐使用 # NULL # 数据结构 # 结构化 # 这是一个 # map # Object # 代码可读性 # 链式 # 转换为 # ide # Filter # 组中 # 收集器
相关栏目: 【 行业资讯 】 【 网络运营 】 【 GEO优化 】 【 营销推广 】 【 SEO优化 】 【 技术教程 】 【 代码知识 】 【 AI推广 】
相关推荐: Win11声音太小怎么办_Windows 11开启响度均衡增强音量【技巧】 c# Task.ConfigureAwait(true) 在什么场景下是必须的 Win11怎么开启远程桌面连接_Windows11系统属性远程设置 Win11怎么开启游戏模式_Win11设置游戏选项卡优化 如何用::实现单例模式_php静态方法与作用域操作符应用【技巧】 Win11如何设置系统语言_Win11系统语言切换教程【攻略】 如何用::实现工具类方法调用_php静态工具类设计技巧【技巧】 Win11怎么关闭定位服务_保护Win11位置隐私设置指南【详解】 Win11如何查看开机时间 Win11查询系统运行时间【命令】 PythonWeb前后端整合项目教程_FastAPIReact完整实例 C++友元类使用场景_C++类间协作设计方式讲解 Python音视频处理高级项目教程_FFmpegPydub剪辑与特效 如何将竖排文本文件转换为横排字符串 Python异步网络编程_aiohttp说明【指导】 Win11怎么设置默认视频播放器_Windows 11关联媒体文件打开方式【步骤】 Win11怎样激活系统密钥_Win11系统密钥激活步骤【攻略】 Win11用户账户控制怎么关_Win11关闭UAC弹窗提示【设置】 php打包exe后无法写入文件_权限问题解决方法【教程】 Win10如何更改电脑休眠时间_Windows10电源和睡眠选项调整 如何使用正则表达式精确匹配最多含一个换行符的 start-end 区段 php增删改查在php8里有什么变化_新特性对curd的影响【指南】 Win11怎么关闭系统声音_Win11系统提示音静音设置【详解】 Windows 10怎么录屏_Windows 10使用Xbox Game Bar录制屏幕视频教程 Windows系统文件被保护机制阻止怎么办_权限不足错误处理方案 c++ atoi和atof函数用法_c++字符数组转数字 Python与Docker容器化部署实战_镜像构建与CI/CD流程 如何减少Golang内存碎片化_Golang内存分配与回收优化方法 C#如何使用Channel C#通道实现异步通信 php485能和物联网模块通信吗_php485对接NB-IoT模块实例【说明】 Win11如何设置省电模式 Win11开启电池节电功能【优化】 Python集合操作技巧_高效去重解析【教程】 如何在Golang中理解指针比较_Golang地址比较与相等判断 如何使用Golang benchmark测量函数延迟_统计执行耗时 Python对象比较与排序_魔术方法解析【教程】 如何使用Golang指针与接口结合_实现方法调用和动态类型 Win11怎么开启空间音效_Windows11耳机杜比音效与Sonic设置 Win10如何备份驱动程序_Win10驱动备份步骤【攻略】 Win11怎么打开注册表_Windows 11注册表编辑器启动命令【步骤】 如何使用Golang安装依赖库_管理模块和第三方包 Windows10如何更改任务栏高度_Win10解除锁定调整大小 Win11如何设置鼠标灵敏度_Win11鼠标灵敏度调整教程【攻略】 如何在Golang中编写端到端测试_Golang E2E测试流程示例 Mac怎么进行语音输入_Mac听写功能设置与使用【教程】 Win10怎样设置多显示器_Win10多显示器扩展设置【攻略】 Win11怎么关闭开机声音_Win11系统启动提示音静音【教程】 Win11怎么关闭定位服务 Win11禁止应用获取位置信息【隐私】 Win11怎么开启窗口对齐助手_Windows11系统多任务处理设置 Python对象生命周期管理_创建销毁解析【教程】 如何解决同一段404代码在不同主机上表现不一致的问题 Win11无法识别耳机怎么办_解决Win11插耳机没声音问题【步骤】
赣ICP备2024031479号