导航
电话
咨询
地图
顶部
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推广 】
相关推荐: Win10如何备份驱动程序_Win10驱动备份步骤【攻略】 Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密) c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】 Windows10怎么备份注册表_Windows10注册表备份步骤【教程】 C++如何获取CPU核心数?(std::thread::hardware_concurrency) Python项目回滚策略_发布安全说明【指导】 php在Linux怎么部署_LNMP环境搭建PHP服务的详细指南【指南】 c++如何连接Redis c++ hiredis库使用教程【指南】 Win11怎么设置默认浏览器Chrome_Windows11修改默认网页打开方式 如何使用Golang encoding/json解析JSON_Golang encoding/json解析与序列化示例 C#如何序列化对象为XML XmlSerializer用法 Win11触摸板没反应怎么办_开启Win11笔记本触摸板手势教程【步骤】 Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤 Win10如何卸载微软拼音输入法 Win10只保留一个输入法【教程】 为什么Go建议使用error接口作为错误返回_Go Error接口设计原因说明 Win11怎么开启上帝模式_创建Windows 11 God Mode全能文件夹【技巧】 Windows电脑如何进入安全模式?(多种按键方法) Win11怎么设置系统还原_Windows11系统属性保护设置 Windows10如何更改计算机工作组_Win10系统属性修改Workgroup Win10怎样卸载TeamViewer_Win10卸载TeamViewer步骤【教程】 如何在 Go 中比较自定义的数组类型(如 [20]byte) LINUX怎么进行文本内容搜索_Linux grep命令正则表达式用法大全【教程】 Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】 Win10怎样卸载iTunes_Win10卸载iTunes步骤【步骤】 mac本地php环境如何开启curl_curl扩展启用与测试步骤详解【汇总】 Windows10系统怎么查看系统版本_Win10运行winver命令查询 如何在Windows上设置闹钟和计时器_系统自带的时钟应用全攻略【生活技巧】 Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】 Win10怎么卸载爱奇艺_Win10彻底卸载爱奇艺方法【步骤】 如何使用 Python 合并文件夹内多个 Excel 文件并避免权限错误 Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康 Windows 11怎么设置默认解压软件_Windows 11为ZIP/RAR文件指定默认打开程序 Mac的访达(Finder)怎么用_Mac文件管理入门教程【详解】 Win11怎么开启远程桌面_Win11系统远程桌面启用开关 php修改数据怎么批量改状态_批量更新status字段值技巧【操作】 Win11怎么开启游戏工具栏_Windows11 Xbox Game Bar快捷键 Win11怎么关闭自动维护 Win11禁用系统自动维护功能【优化】 如何在Golang中处理数据库事务错误_回滚和日志记录 PythonPandas数据分析项目教程_时间序列透视表应用 Windows10如何查看蓝屏日志_Win10使用事件查看器分析Dump文件 如何解决Windows时间不准的问题?(自动同步设置) 如何用正则表达式精确匹配最多含一个换行符的起止片段 Python并发安全问题_资源竞争说明【指导】 Python邮件系统自动化教程_批量发送解析与模板应用 如何使用Golang实现错误包装与传递_Golangfmt.Errorf%w使用实践 c++协程和线程的区别 c++异步编程模型对比【核心】 Windows10如何更改鼠标图标_Win10鼠标属性指针浏览 Win11文件夹预览图不显示怎么办_Win11缩略图缓存重建修复【教程】 如何在Golang中写入XML文件_生成符合规范的XML数据 Golang如何避免指针逃逸_Golang逃逸分析与堆栈优化策略
赣ICP备2024031479号