导航
电话
咨询
地图
顶部
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截图快捷键是什么_Win11自带截图工具使用技巧【汇总】 为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】 c# 在高并发场景下,委托和接口调用的性能对比 Win11麦克风没声音怎么设置_Win11麦克风权限及驱动修复【教程】 Win11任务栏怎么放到顶部_Win11修改任务栏位置方法【详细】 PHP 中如何在函数内持久化修改引用变量的指向 php485返回空数组怎么回事_php485数据接收为空排查指南【详解】 PHP主流架构怎么部署到Docker_容器化流程【操作】 如何在Golang中实现CI/CD流水线自动化测试_Golang持续集成测试执行方法 MySQL 中使用 IF 和 CASE 实现查询字段的条件转换 windows 10专注助手怎么关闭_windows 10禁用通知提醒功能方法 Win10怎么卸载金山毒霸_Win10彻底卸载金山毒霸方法【步骤】 Win10怎样卸载DockerDesktop_Win10卸载DockerDesktop步骤【步骤】 TestNG的testng.xml配置文件怎么写 c# 服务器GC和工作站GC的区别和设置 Win10如何更改开机密码_Windows10登录选项更改密码 Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡时长设置【步骤】 如何使用Golang管理模块版本_Golanggo mod tidy与升级方法 Linux如何挂载新硬盘_Linux磁盘分区格式化与开机自动挂载【指南】 Windows服务无法启动错误1067是什么_进程意外终止的解决方法 Windows10无法连接到Internet_Win10网络重置命令详解 Python配置文件操作教程_JSONINIYAML解析与应用实战 SAX解析器是什么,它与DOM在处理大型XML文件时有何不同? 如何在 Go 中可靠地测试含 time.Time 字段的结构体 php8.4如何配置ssl证书_php8.4https访问配置指南【教程】 C++如何使用std::transform批量处理容器元素?(代码示例) Windows10电脑怎么连接蓝牙设备_Win10蓝牙配对失败解决方法 Win11如何设置省电模式 Win11开启电池节电功能【优化】 WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程 php增删改查在php8里有什么变化_新特性对curd的影响【指南】 c++ std::atomic如何保证原子性 c++ CAS操作原理【底层】 Win11系统更新失败怎么办 Win11系统更新失败解决法【步骤】 Win11如何设置ipv6 Win11开启IPv6网络协议教程【步骤】 如何使用Golang实现RPC序列化与反序列化_Golang RPC数据编码与解码方法 Mac怎么设置登录项_Mac管理开机自启动程序【教程】 Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录 php485函数怎么捕获异常_php485错误处理机制设置技巧【操作】 MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第三方工具加密【教程】 Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】 如何在JavaScript中动态拼接PHP的base_url与JS变量 Python爬虫项目实战教程_Scrapy抓取与存储数据实例 c# Task.ConfigureAwait(true) 在什么场景下是必须的 如何使用Golang benchmark测量函数延迟_统计执行耗时 Windows电脑如何截屏?(四种快捷方法) mac怎么分屏_MAC双屏显示与分屏操作技巧【指南】 Windows10怎么用“讲述人”读屏辅助 Windows10轻松使用开启讲述人朗读屏幕文字帮助视障用户【教程】 Windows 11登录时提示“用户配置文件服务登录失败”怎么办_Windows 11修复损坏的用户配置文件 c++中如何对数组进行排序_c++数组排序算法汇总 Python邮件系统自动化教程_批量发送解析与模板应用 Win11如何设置文件权限 Win11 NTFS文件夹所有权与安全设置【高级】
赣ICP备2024031479号