当前位置: 首页 > news >正文

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;}}
  1. 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);
    
  2. 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));
    
  3. 两个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));
    
  4. 结果

    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 的线程同步

使用互斥量时存在一个问题: 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量&#xff0c;使用互斥量时也必须排队。而实际上若只是读取一个变量&#xff0c;是可以让多个线程同时访问的&#xff0c;这样互斥量就会降低程序的性能。 例如&#xf…...

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 输入&#xff1a;帆软脚本文件路径输出&#xff1a;帆软文件检查结果Excel#获取来源表 def table_scan(sql_str):# remove the /* */ commentsq re.sub(r"/\*[^*]*\*(?:[^*/][^*]*\*)*/", "", sql_str)# r…...

TypeScript

TypeScript 简称&#xff1a; TS &#xff0c;是 JavaScript 的超集 &#xff0c;简单来说就是&#xff1a; JS 有的 TS 都有 TypeScript Type JavaScript &#xff08;在 JS 基础之上&#xff0c; 为 JS 添加了类型支持 &#xff09; 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...

数据结构 | 线性数据结构——列表

目录 一、无序列表抽象数据类型 二、实现无序列表&#xff1a;链表 2.1 Node类 2.2 UnorderedList类 三、有序列表抽象数据类型 四、实现有序列表 列表是元素的集合&#xff0c;其中每一个元素都有一个相对于其他元素的位置。更具体地说&#xff0c;这种列表成为无序列表…...

【ARM 常见汇编指令学习 6 - bic(位清除), orr(位或), eor(异或)】

文章目录 BIC 指令ORR 位或指令EOR 异或指令 上篇文章&#xff1a;ARM 常见汇编指令学习 5 – arm64汇编指令 wzr 和 xzr 下篇文章&#xff1a;ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令 BIC 指令 指令格式 bic{条件}{S} Rd&#xff0c;Rn&#xff0c;operan…...

在CSDN学Golang场景化解决方案(EFK分布式日志系统方案)

一&#xff0c;ElasticSearch 分布式集群部署 在 Golang EFK 分布式日志系统方案中&#xff0c;ElasticSearch 是一个分布式搜索引擎和数据存储库&#xff0c;它可以用于存储和搜索大量的日志数据。以下是 ElasticSearch 分布式集群部署的步骤&#xff1a; 下载 ElasticSearc…...

MySQL篇

文章目录 一、MySQL-优化1、在MySQL中&#xff0c;如何定位慢查询?2、SQL语句执行很慢, 如何分析呢&#xff1f;3、了解过索引吗&#xff1f;&#xff08;什么是索引&#xff09;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中&#xff0c;我们只需要通过使用Async注解就能简单的将原来的同步函数变为异步函数&#xff0c;Task类实现如下&#xff1a; package com.example.demospringboot;import lombok.extern.slf4j.Slf4j; import org.springframework.s…...

<C语言> 动态内存管理

1.动态内存函数 为什么存在动态内存分配&#xff1f; int main(){int num 10; //向栈空间申请4个字节int arr[10]; //向栈空间申请了40个字节return 0; }上述的开辟空间的方式有两个特点&#xff1a; 空间开辟大小是固定的。数组在声明的时候&#xff0c;必须指定数组的…...

【ASPICE】:学习记录

学习记录 ASPICE中文资料什么是ASPICE过程参考模型 ASPICE全称“Automotive Software Process Improvement and Capability dEtermination”&#xff0c;即“汽车软件过程改进及能力评定”模型框架 ASPICE中文资料 主要资料来源 什么是ASPICE 过程参考模型...

图论--最短路问题

图论–最短路问题 邻接表 /* e[idx]:存储点的编号 w[idx]:存储边的距离&#xff08;权重&#xff09; */ void add(int a, int b, int c) {e[idx] b;ne[idx] h[a];w[idx] ch[a] idx ; }1.拓扑排序 给定一个 n 个点 m 条边的有向图&#xff0c;点的编号是 11 到 n&#xf…...

go 结构体 - 值类型、引用类型 - 结构体转json类型 - 指针类型的种类 - 结构体方法 - 继承 - 多态(interface接口) - 练习

目录 一、结构体 1、python 与 go面向对象的实现&#xff1a; 2、初用GO中的结构体&#xff1a;&#xff08;实例化一个值类型的数据&#xff08;结构体&#xff09;&#xff09; 输出结果不同的三种方式 3、实例化一个引用类型的数据&#xff08;结构体&#xff09; 4、…...

盘点16个.Net开源项目

今天一起盘点下&#xff0c;16个.Net开源项目&#xff0c;有博客、商城、WPF和WinForm控件、企业框架等。&#xff08;点击标题&#xff0c;查看详情&#xff09; 一、一套包含16个开源WPF组件的套件 项目简介 这是基于WPF开发的&#xff0c;为开发人员提供了一组方便使用自…...

记录对 require.js 的理解

目录 一、使用 require.js 主要是为了解决这两个问题二、require.js 的加载三、main.js 一、使用 require.js 主要是为了解决这两个问题 实现 js 文件的异步加载&#xff0c;避免网页失去响应&#xff1b;管理模块之间的依赖性&#xff0c;便于代码的编写和维护。 二、require.…...

MySQL调优实战:MySQL日志机制深入解析,redo/undo/binlog/slow/error日志底层全通透

一、MySQL五大日志总览&#xff08;全局认知&#xff09;MySQL 日志严格分为两层&#xff1a;Server层日志 InnoDB引擎层日志。这是90%人混淆的根源&#xff1a;1.1 Server层日志&#xff08;所有引擎通用&#xff09;Binlog&#xff08;二进制日志&#xff09;&#xff1a;主…...

视频拖动进度条时如果落在GOP内,是怎么定位的?

视频拖动进度条时的 GOP 定位行为说明 0. 名词解释&#xff1a;Seek 是什么&#xff1f; Seek&#xff08;寻址/定位&#xff09;来自英文 “seek”&#xff08;寻找、定位&#xff09;&#xff0c;在视频/音频领域特指将播放位置跳转到指定时间点的操作。 用户拖动进度条、点击…...

2026毕设求生指南:用产品思维交付你的“第一份作品”

前言&#xff1a;别把毕设当作业&#xff0c;它是你职业起点的“第一份产品” 打开电脑&#xff0c;面对“毕业设计”四个字&#xff0c;你是否感到一片空白&#xff1f; 收藏了无数篇“毕设攻略”&#xff0c;却依然不知道从何下手——看文献像大海捞针&#xff0c;写代码bu…...

AI辅助编程:发展现状、效率评估与未来展望

引言:AI如何重塑编程范式? 在过去的几年里,人工智能(AI)正以前所未有的速度渗透到软件开发的各个角落。从最初的代码补全工具,到如今能够理解复杂需求、生成完整函数甚至设计系统架构的智能体,AI辅助编程已经从科幻概念演变为开发者日常工作中不可或缺的“副驾驶”。它…...

为什么你的Windows快捷键突然失效?Hotkey Detective一键定位占用程序终极指南

为什么你的Windows快捷键突然失效&#xff1f;Hotkey Detective一键定位占用程序终极指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-d…...

转行简历不会衔接?AI一键生成,自然过渡无违和感,邀约率飙升3倍!

“我以前是做销售的&#xff0c;想转行产品经理&#xff0c;简历上怎么写才能不让HR觉得我风马牛不相及&#xff1f;” “干了几年运营&#xff0c;现在想尝试开发&#xff0c;简历里除了写熟悉Word、Excel&#xff0c;还能写啥&#xff1f;” “裸辞转行&#xff0c;简历一片…...

【案例共创】CodeArts+SKILL 双引擎:AI 驱动 WEB 服务器极速部署

本案例由开发者&#xff1a;JeffDing提供&#xff0c;华为开发者空间案例中心优化并收录。 最新案例动态&#xff0c;请查阅【案例共创】CodeArtsSKILL 双引擎&#xff1a;AI 驱动 WEB 服务器极速部署小伙伴们快来进行实操吧&#xff01; 一、概述 1.1 案例介绍 华为云码道…...

原神抽卡数据分析神器:告别盲目抽卡,用数据掌控你的欧皇之路

原神抽卡数据分析神器&#xff1a;告别盲目抽卡&#xff0c;用数据掌控你的欧皇之路 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 你是否曾在原神抽卡时…...

AI测试工具百花齐放,选型之前先搞懂这4个核心问题

在软件测试领域&#xff0c;AI 测试工具正以前所未有的速度涌现。从智能用例生成、缺陷预测到自愈型自动化测试&#xff0c;厂商们构建起一个眼花缭乱的技术矩阵。然而&#xff0c;当团队真正面临选型决策时&#xff0c;却发现“百花齐放”往往意味着“乱花渐欲迷人眼”。许多团…...

Unity构建性能分析工具:四层数据采集与包体优化实战

1. 这不是又一个“构建日志查看器”&#xff0c;而是一把能切开Unity构建黑箱的手术刀 我第一次在客户项目里看到Build Report Tool时&#xff0c;它正安静地躺在一个被遗忘的Plugins文件夹里&#xff0c;名字叫 BuildReportTool_v2.3.1.unitypackage 。当时团队正为一个中型…...