jdk8的Steam流工作常用方法总结
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中某些属性映射到新的集合中
// 使用map操作将Person对象映射到PersonDTO对象,并收集到新的List<PersonDTO>中
List<PersonDTO> personDTOs = people.stream()
.map(person -> new PersonDTO(person.getId(), person.getName())) // 创建新的PersonDTO对象
.collect(Collectors.toList()); // 收集到List中
收集list集合以某个属性为键,以本身为值为map
Map<String, UserInfo> phoneNumberMap = list.stream()
.collect(Collectors.toMap(
UserInfo::getPhoneNumber(), // Key Mapper: 从每个UserInfo对象中提取电话号码作为Map的键
Function.identity(), // Value Mapper: 使用UserInfo对象本身作为Map的值
(v1, v2) -> v1 // Merge Function: 如果存在键冲突(即两个UserInfo对象有相同的电话号码),则保留第一个对象(v1),丢弃第二个对象(v2)
));
收集list集合中的对象,映射到另个一对象集合中
List<Person> people = Arrays.asList(
new Person("1", "Alice", 30, "123 Street"),
new Person("2", "Bob", 25, "456 Avenue")
);
// 使用map操作将Person对象映射到PersonDTO对象,并收集到新的List<PersonDTO>中
List<PersonDTO> personDTO = people.stream()
.map(person -> new PersonDTO(person.getId(), person.getName())) // 创建新的PersonDTO对象
.collect(Collectors.toList()); // 收集到List中
根据list对象集合中某个属性去重
List<Person> persons = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Alice", 28), // 重复的name
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);
jdk8的Steam流工作常用方法总结的更多相关文章
- JDK8 Steam流操作
原文:https://github.com/niumoo/jdk-feature/blob/master/src/main/java/net/codingme/feature/jdk8/Jdk8Str ...
- 功能:Java8新特性steam流
Java8新特性steam流 一.包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Int ...
- JDK8中函数式流编程推荐
强烈推荐使用Java8中函数流API库来处理集合相关的数据,今天又看来一个项目代码里面用到来很多这样的处理,基本上可以解决大部分遍历问题.并且代码简洁清晰. JAVA8与lambda表达式 JDK8 ...
- jdk8的stream流式计算的操作
jdk8之后增加了流式计算,现在根据学习了流式计算,并把过程记录下来: Person.java的bean package com.zhang.collectordemo; /** * @program ...
- Jdk8中Stream流的使用,让你脱离for循环
学习要求: 知道一点儿函数式接口和Lambda表达式的基础知识,有利于更好的学习. 1.先体验一下Stream的好处 需求:给你一个ArrayList用来保存学生的成绩,让你打印出其中大于60的成绩. ...
- 这些Stream流的常用方法你得记住,步骤简单不麻烦!
forEach遍历 /* forEach:该方法接收一个Consumer接口函数,将每一个流元素交给该函数处理 简单记: forEach方法:用来遍历流中的数据 是一个终结方法,遍历之后就不能继续调用 ...
- JDK8 新特性流式数据处理
https://blog.csdn.net/canot/article/details/52957262
- 【JDK8】Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...
- (六)jdk8学习心得之Stream流
六.Stream流 1. 什么是stream流 现阶段,可以把stream流看成一个高级版的Iterator.普通的Iterator只能实现遍历,遍历做什么,就需要具体些功能代码函数了.而这个stre ...
- Stream流思想和常用方法
一.IO流用于读写:Stream流用于处理数组和集合数据: 1.传统集合遍历: 2.使用Stream流的方式过滤: 其中,链式编程(返回值就是对象自己)中,filter使用的是Predicate函数式 ...
随机推荐
- TensorFLow手写字识别深度学习网络分析详解
Tensorflow和MNIST简介 TensorFlow 是一个采用数据流图,用于数值计算的开源软件库.它是一个不严格的"神经网络"库,可以利用它提供的模块搭建大多数类型的神经网 ...
- CLR via C# 笔记 -- 异常和状态管理(20)
1. 异常是指成员没有完成它的名称所宣称的行动,异常类继承System.Exception. 2. .Net Framework 异常处理机制是用Microsoft windows提供的结构化异常处理 ...
- GIS数据获取:土地利用与土壤属性、DEM、水体水系数据
本文对目前主要的土壤属性.地表覆盖.数字高程模型与水体水系矢量数据获取网站加以整理与介绍. 本文为"GIS数据获取整理"专栏中第三篇独立博客,因此本文全部标题均由" ...
- Django-解决跨域请求(基于js,jQuery的josnp,设置响应头的cors)
同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的 ...
- Prometheus监控系统(一)Prometheus介绍
1. Prometheus简介 Prometheus受启发于Google的Brogmon监控系统(类似kubernetes是从Google的Brog系统演变而来).于2012年以开源形式发布,在201 ...
- Python_9 py文件导入和路径处理
一.查缺补漏 Python中两个值交换可以直接交换如:a,b=b,a 冒泡就是从小到大排序,因为越到后越大 自动导包也适用于自己创建的模块 关于正斜杠和反斜杠https://www.cnblogs.c ...
- win11 vmware16 启动虚拟机引起蓝屏
前言 在win11 上安装 vmware16, 之后安装ubuntu16时,一打开ubuntu虚拟机就触发系统蓝屏. 正文 我改了两个地方: 控制面板->程序->启用或关闭Windows功 ...
- Java获取客户端请求信息
客户端工具类 /** * 客户端工具类 * * @author hviger */ public class ServletUtils { /** * 获取String参数 */ public sta ...
- Linux安装 JDK (CentOS 7)
Linux安装 JDK 一.Linux安装软件的方式 第一种:二进制发布包安装: 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 第二种: rpm安装 : 软件已经按照redhat的包管理规 ...
- 2024 暑假友谊赛-热身2 (7.12)zhaosang
E-E https://vjudge.net/problem/AtCoder-diverta2019_b 给你 a, b, c ,n就是问你有多少(ia+jb+k*c)等于n的答案i,j,k任意几个都 ...