Java8的stream常用的操作
记录一下常用的用法
定义测试对象
	@Datapublic class Employee {//idprivate Integer id;//姓名private String name;//年龄private Integer age;//身高private Double height;//存款private BigDecimal deposit;public Employee(Integer id, String name, Integer age, Double height, BigDecimal deposit) {this.id = id;this.name = name;this.age = age;this.height = height;this.deposit = deposit;}}
 
-  
list操作如排序、求和、获取最大最小值、累加等
List<Employee> listOne = new ArrayList<>();listOne.add(new Employee(1, "张三", 12, 160.23, new BigDecimal("5000")));listOne.add(new Employee(2, "李四", 18, 182.56, new BigDecimal("2000.15")));listOne.add(new Employee(3, "王五", 15, 185.65, new BigDecimal("300")));listOne.add(new Employee(4, "周扒皮", 55, 165.55, new BigDecimal("180654.57")));listOne.add(new Employee(5, "独眼龙", 18, 195.55, new BigDecimal("154.12")));//根据年龄从小到大排序 升序List<Employee> ages1 = listOne.stream().sorted(Comparator.comparing(Employee::getAge)).collect(Collectors.toList());ages1.forEach(System.out::println);System.out.println("---------------------------------------------------------");//根据年龄从大到小排序 降序List<Employee> ages2 = listOne.stream().sorted(Comparator.comparing(Employee::getAge, Comparator.reverseOrder())).collect(Collectors.toList());ages2.forEach(System.out::println);System.out.println("---------------------------------------------------------");//根据年龄从大到小排序 降序 根据身高从大到小排序 降序(仅针对于当一个属性相等时才有效)List<Employee> ages3 = listOne.stream().sorted(Comparator.comparing(Employee::getAge, Comparator.reverseOrder()).thenComparing(Employee::getHeight, Comparator.reverseOrder())).collect(Collectors.toList());ages3.forEach(System.out::println);System.out.println("---------------------------------------------------------");//获取年龄之和int ages = listOne.stream().mapToInt(Employee::getAge).sum();//获取身高之和double heights = listOne.stream().mapToDouble(Employee::getHeight).sum();//全部的存款BigDecimal reduce = listOne.stream().map(Employee::getDeposit).reduce(BigDecimal.ZERO, BigDecimal::add); -  
list转map
//根据id转map Employee::getId作为key的属性 e作为map的value (v1,v2)->v2 当key不唯一时的操作Map<Integer, Employee> map1 = listOne.stream().collect(Collectors.toMap(Employee::getId, e -> e, (v1, v2) -> v2));//根据某个属性(年龄)分组Map<Integer, List<Employee>> map2 = listOne.stream().collect(Collectors.groupingBy(Employee::getAge)); -  
两个map合并
Map<Integer, Employee> map3 = new HashMap<>();map3.put(2, new Employee(2, "李四2", 20, 182.56, new BigDecimal("2000.15")));map3.put(3, new Employee(3, "王五2", 16, 182.99, new BigDecimal("2222.15")));map3.put(4, new Employee(4, "周扒皮2", 60, 164.55, new BigDecimal("154.57")));map3.put(6, new Employee(6, "赵六", 18, 182.56, new BigDecimal("2000.15")));//合并 (v1, v2)key相同时value的值 v1为map3的value v2为map1的valuemap1.forEach((key1, value1) -> map3.merge(key1, value1, (v1, v2) -> {System.out.println("v1:"+v1);System.out.println("v2:"+v2);v2.setName(v1.getName());v2.setDeposit(v1.getDeposit().add(v2.getDeposit()));return v2;}));System.out.println("---------------------------------------------------------");map3.forEach((key,value)-> System.out.println(key+":"+value)); -  
结果
Employee(id=1, name=张三, age=12, height=160.23, deposit=5000) Employee(id=3, name=王五, age=15, height=185.65, deposit=300) Employee(id=2, name=李四, age=18, height=182.56, deposit=2000.15) Employee(id=5, name=独眼龙, age=18, height=195.55, deposit=154.12) Employee(id=4, name=周扒皮, age=55, height=165.55, deposit=180654.57) --------------------------------------------------------- Employee(id=4, name=周扒皮, age=55, height=165.55, deposit=180654.57) Employee(id=2, name=李四, age=18, height=182.56, deposit=2000.15) Employee(id=5, name=独眼龙, age=18, height=195.55, deposit=154.12) Employee(id=3, name=王五, age=15, height=185.65, deposit=300) Employee(id=1, name=张三, age=12, height=160.23, deposit=5000) --------------------------------------------------------- Employee(id=4, name=周扒皮, age=55, height=165.55, deposit=180654.57) Employee(id=5, name=独眼龙, age=18, height=195.55, deposit=154.12) Employee(id=2, name=李四, age=18, height=182.56, deposit=2000.15) Employee(id=3, name=王五, age=15, height=185.65, deposit=300) Employee(id=1, name=张三, age=12, height=160.23, deposit=5000) --------------------------------------------------------- v1:Employee(id=2, name=李四2, age=20, height=182.56, deposit=2000.15) v2:Employee(id=2, name=李四, age=18, height=182.56, deposit=2000.15) v1:Employee(id=3, name=王五2, age=16, height=182.99, deposit=2222.15) v2:Employee(id=3, name=王五, age=15, height=185.65, deposit=300) v1:Employee(id=4, name=周扒皮2, age=60, height=164.55, deposit=154.57) v2:Employee(id=4, name=周扒皮, age=55, height=165.55, deposit=180654.57) --------------------------------------------------------- 1:Employee(id=1, name=张三, age=12, height=160.23, deposit=5000) 2:Employee(id=2, name=李四2, age=18, height=182.56, deposit=4000.30) 3:Employee(id=3, name=王五2, age=15, height=185.65, deposit=2522.15) 4:Employee(id=4, name=周扒皮2, age=55, height=165.55, deposit=180809.14) 5:Employee(id=5, name=独眼龙, age=18, height=195.55, deposit=154.12) 6:Employee(id=6, name=赵六, age=18, height=182.56, deposit=2000.15) 
相关文章:
Java8的stream常用的操作
记录一下常用的用法 定义测试对象 Datapublic class Employee {//idprivate Integer id;//姓名private String name;//年龄private Integer age;//身高private Double height;//存款private BigDecimal deposit;public Employee(Integer id, String name, Integer age, Double…...
传统计算机视觉
传统计算机视觉 计算机视觉难点图像分割基于主动轮廓的图像分割基于水平集的图像分割交互式图像分割基于模型的运动分割 目标跟踪基于光流的点目标跟踪基于均值漂移的块目标跟踪基于粒子滤波的目标跟踪基于核相关滤波的目标跟踪 目标检测一般目标检测识别之特征一般目标检测识别…...
13-3_Qt 5.9 C++开发指南_基于QReadWriteLock 的线程同步
使用互斥量时存在一个问题: 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。而实际上若只是读取一个变量,是可以让多个线程同时访问的,这样互斥量就会降低程序的性能。 例如…...
opencv04-掩膜
opencv04-掩膜 抠图 #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <vector> #include <array> #include <algorithm>using namespace std; using namespace cv;int main() {str…...
python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表
#!/user/bin/evn python import os,re,openpyxl 输入:帆软脚本文件路径输出:帆软文件检查结果Excel#获取来源表 def table_scan(sql_str):# remove the /* */ commentsq re.sub(r"/\*[^*]*\*(?:[^*/][^*]*\*)*/", "", sql_str)# r…...
TypeScript
TypeScript 简称: TS ,是 JavaScript 的超集 ,简单来说就是: JS 有的 TS 都有 TypeScript Type JavaScript (在 JS 基础之上, 为 JS 添加了类型支持 ) TypeScript 是 微软 开发…...
解决启动vue前端报错:npm ERR! Missing script: “serve“
目录 一、遇到问题 二、出现报错的两个原因 三、解决办法 一、遇到问题 npm ERR! Missing script: "serve" npm ERR! npm ERR! To see a list of scripts, run: npm ERR! npm run npm ERR! A complet...
数据结构 | 线性数据结构——列表
目录 一、无序列表抽象数据类型 二、实现无序列表:链表 2.1 Node类 2.2 UnorderedList类 三、有序列表抽象数据类型 四、实现有序列表 列表是元素的集合,其中每一个元素都有一个相对于其他元素的位置。更具体地说,这种列表成为无序列表…...
【ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或)】
文章目录 BIC 指令ORR 位或指令EOR 异或指令 上篇文章:ARM 常见汇编指令学习 5 – arm64汇编指令 wzr 和 xzr 下篇文章:ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令 BIC 指令 指令格式 bic{条件}{S} Rd,Rn,operan…...
在CSDN学Golang场景化解决方案(EFK分布式日志系统方案)
一,ElasticSearch 分布式集群部署 在 Golang EFK 分布式日志系统方案中,ElasticSearch 是一个分布式搜索引擎和数据存储库,它可以用于存储和搜索大量的日志数据。以下是 ElasticSearch 分布式集群部署的步骤: 下载 ElasticSearc…...
MySQL篇
文章目录 一、MySQL-优化1、在MySQL中,如何定位慢查询?2、SQL语句执行很慢, 如何分析呢?3、了解过索引吗?(什么是索引)4、索引的底层数据结构了解过嘛 ?5、什么是聚簇索引什么是非聚簇索引 ?6、知道什么是回表查询嘛…...
图数据库Neo4j学习四——Spring Data NEO
1配置 1.1Maven依赖 <!--neo4j --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency>1.2yml配置 spring:data:neo4j:uri: bolt://localhost:76…...
UE虚幻引擎 UTextBlock UMG文本控件超过边界区域以后显示省略号
版本 5.2.1 裁剪 - 剪切 - 剪切到边界 裁剪 - 高级 - 溢出策略 - 省略...
Spring Boot实践五 --异步任务线程池
一、使用Async实现异步调用 在Spring Boot中,我们只需要通过使用Async注解就能简单的将原来的同步函数变为异步函数,Task类实现如下: package com.example.demospringboot;import lombok.extern.slf4j.Slf4j; import org.springframework.s…...
<C语言> 动态内存管理
1.动态内存函数 为什么存在动态内存分配? int main(){int num 10; //向栈空间申请4个字节int arr[10]; //向栈空间申请了40个字节return 0; }上述的开辟空间的方式有两个特点: 空间开辟大小是固定的。数组在声明的时候,必须指定数组的…...
【ASPICE】:学习记录
学习记录 ASPICE中文资料什么是ASPICE过程参考模型 ASPICE全称“Automotive Software Process Improvement and Capability dEtermination”,即“汽车软件过程改进及能力评定”模型框架 ASPICE中文资料 主要资料来源 什么是ASPICE 过程参考模型...
图论--最短路问题
图论–最短路问题 邻接表 /* e[idx]:存储点的编号 w[idx]:存储边的距离(权重) */ void add(int a, int b, int c) {e[idx] b;ne[idx] h[a];w[idx] ch[a] idx ; }1.拓扑排序 给定一个 n 个点 m 条边的有向图,点的编号是 11 到 n…...
go 结构体 - 值类型、引用类型 - 结构体转json类型 - 指针类型的种类 - 结构体方法 - 继承 - 多态(interface接口) - 练习
目录 一、结构体 1、python 与 go面向对象的实现: 2、初用GO中的结构体:(实例化一个值类型的数据(结构体)) 输出结果不同的三种方式 3、实例化一个引用类型的数据(结构体) 4、…...
盘点16个.Net开源项目
今天一起盘点下,16个.Net开源项目,有博客、商城、WPF和WinForm控件、企业框架等。(点击标题,查看详情) 一、一套包含16个开源WPF组件的套件 项目简介 这是基于WPF开发的,为开发人员提供了一组方便使用自…...
记录对 require.js 的理解
目录 一、使用 require.js 主要是为了解决这两个问题二、require.js 的加载三、main.js 一、使用 require.js 主要是为了解决这两个问题 实现 js 文件的异步加载,避免网页失去响应;管理模块之间的依赖性,便于代码的编写和维护。 二、require.…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
