Steam流工作常用方法总结
收集list 以某几个字段为键以内容为list的map
| Map<String, List<TVoucherDetail>> tVoucherDetailMap = list.stream().collect(Collectors.groupingBy( |
| obj -> obj.getDocumentNumber() + "-" + obj.getCertificationData() |
| )); |
收集list 以某两个字段分组,并以进行统计
| Map<String, Map<String, BigDecimal>> map = s1.collect( |
| Collectors.groupingBy( |
| CurrentTransactionsCount::getCurrentUnitName, |
| Collectors.groupingBy( |
| CurrentTransactionsCount::getAssistCeanDept) |
| ) |
| )); |
收集list 以某两个字段分组,并以进行统计数量
| Map<String, Map<Integer, Long>> map = pfaDeptProblemPos.stream().collect( |
| Collectors.groupingBy( |
| PfaDeptProblemPo::getThreeUnitName, |
| Collectors.groupingBy(PfaDeptProblemPo::getProblemType, Collectors.counting()))); |
收集list 以某两个字段分组,并以进行统计合计(需要判空处理)
| Map<String, Map<String, BigDecimal>> map = s1.collect( |
| Collectors.groupingBy( |
| CurrentTransactionsCount::getCurrentUnitName, |
| Collectors.groupingBy( |
| CurrentTransactionsCount::getAssistCeanDept, |
| Collectors.reducing( |
| BigDecimal.ZERO, |
| e -> e.getBalance() != null ? e.getBalance() : BigDecimal.ZERO, |
| BigDecimal::add) |
| ) |
| )); |
收集list中某个BigDecimal属性并统计
| BigDecimal sum = list.stream().filter(e -> e.getDebitAmount() != null).map(TVoucherDetail::getDebitAmount).reduce(BigDecimal.ZERO,BigDecimal::add); |
收集list中某些属性映射到新的集合中
| |
| List<PersonDTO> personDTOs = people.stream() |
| .map(person -> new PersonDTO(person.getId(), person.getName())) |
| .collect(Collectors.toList()); |
收集list集合以某个属性为键,以本身为值为map
| Map<String, UserInfo> phoneNumberMap = list.stream() |
| .collect(Collectors.toMap( |
| UserInfo::getPhoneNumber(), |
| Function.identity(), |
| (v1, v2) -> v1 |
| )); |
收集list集合中的对象,映射到另个一对象集合中
| List<Person> people = Arrays.asList( |
| new Person("1", "Alice", 30, "123 Street"), |
| new Person("2", "Bob", 25, "456 Avenue") |
| ); |
| |
| List<PersonDTO> personDTO = people.stream() |
| .map(person -> new PersonDTO(person.getId(), person.getName())) |
| .collect(Collectors.toList()); |
根据list对象集合中某个属性去重
| List<Person> persons = Arrays.asList( |
| new Person("Alice", 25), |
| new Person("Bob", 30), |
| new Person("Alice", 28), |
| new Person("Charlie", 35) |
| ); |
| |
| Collection<Person> values = persons.stream().collect(Collectors.toMap( |
| Person::getName, |
| Function.identity(), |
| (old, n) -> old |
| )).values(); |
| |
| values.forEach(System.out::println); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南