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

Java 8 的那些常见写法

前言

现在Java已经发展到Java19版本了,由于Java后面一些版本,就开始商用收费了,所以目前绝大多数公司的JDK版本都是采用的之前稳定且免费的1.8版本,也就是Java8,这个版本已经能满足几乎所有业务的需求开发了,下面我列举几个Java8中的一些常见写法。

1. 循环遍历

示例:循环打印集合对象信息

常规写法:

for (User user : users) {System.out.println(user.toString());
}

Java 8 写法:

users.forEach(o -> System.out.println(o.toString()));

2. 函数式接口:匿名内部类

示例:多线程异步打印

常规写法:

new Thread(new Runnable() {@Overridepublic void run() {System.out.println("hello world");}
}).start();

Java 8 写法:

new Thread(() -> System.out.println("hello world")).start();

3. 排序(升序版:从小到大)

示例:用户年龄小到大排序

常规写法:

Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {return o1.getAge() - o2.getAge();}
});

Java 8 写法1:基础版

Collections.sort(userList, (o1, o2) -> o1.getAge() - o2.getAge());

Java 8 写法2:进阶版

Collections.sort(userList, Comparator.comparingInt(User::getAge));

Java 8 写法3:终极版

userList.sort(Comparator.comparingInt(User::getAge));

【注】数值比较可以直接相减排序,非数值比较请用 compareTo() 方法。
【如】 return o1.getName().compareTo(o2.getName());

4. 排序(降序版:从大到小)

示例:用户年龄小到大排序

常规写法:

Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {return o2.getAge() - o1.getAge();}
});

Java 8 写法1:基础版

Collections.sort(userList, (o1, o2) -> o2.getAge() - o1.getAge());

Java 8 写法2:终极版

userList.sort((o1, o2) -> o2.getAge() - o1.getAge());

5. 过滤

示例:过滤年龄小于18的用户

常规写法:

List<User> users = new ArrayList<>();
for(User u: userList){if (u.getAge() < 18) {users.add(u);}
}

Java 8 写法:

List<User> users = userList.stream().filter(u -> u.getAge() < 18).collect(Collectors.toList());

6. 求和

示例:求所有用户的年龄总和

常规写法:

int sum = 0;
for(User u: userList){sum += u.getAge();
}
System.out.println("年龄总和 : " + sum);

Java 8 写法:

int sum = userList.stream().mapToInt(User::getAge).sum();
System.out.println("年龄总和 : " + sum);

7. 求最大值

示例:求所有用户中最大年龄

常规写法:

int maxAge = 0;
for(User u: userList){if (u.getAge() > maxAge) {maxAge = u.getAge();}
}
System.out.println("最大年龄 : " + maxAge);

Java 8 写法:

int maxAge = userList.stream().mapToInt(User::getAge).max().getAsInt();
System.out.println("最大年龄 : " + maxAge);

8. 求最小值

示例:求所有用户中最小年龄

常规写法:

int maxAge = Integer.MAX_VALUE;
for(User u: userList){if (u.getAge() < maxAge) {maxAge = u.getAge();}
}
System.out.println("最小年龄 : " + maxAge);

Java 8 写法:

int minAge = userList.stream().mapToInt(User::getAge).min().getAsInt();
System.out.println("最小年龄 : " + minAge);

9. 求平均值

示例:求所有用户平均年龄

常规写法:

int sum = 0;
int size = userList.size();
for(User u: userList){sum += u.getAge();
}
double aveAge = (double) sum / size;
System.out.println("平均年龄 : " + aveAge);

Java 8 写法:

double aveAge = userList.stream().mapToInt(User::getAge).average().getAsDouble();
System.out.println("平均年龄 : " + aveAge);

10. 获取属性集合

示例:获取所有用户的 id 集合

常规写法:

List<Long> ids = new ArrayList<>();
for(User u: userList){ids.add(u.getId());
}

Java 8 写法:

List<Long> ids = userList.stream().map(User::getId).collect(Collectors.toList());

11. List 转 Map

示例:将所有用户 List 集合转为 Map 集合,且 id 为键

常规写法:

Map<Long, User> userMap = new HashMap<Long, User>();
for (User user : users) {userMap.put(user.getId(), user);
}

Java 8 写法:

Map<Long, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity

相关文章:

Java 8 的那些常见写法

前言 现在Java已经发展到Java19版本了&#xff0c;由于Java后面一些版本&#xff0c;就开始商用收费了&#xff0c;所以目前绝大多数公司的JDK版本都是采用的之前稳定且免费的1.8版本&#xff0c;也就是Java8&#xff0c;这个版本已经能满足几乎所有业务的需求开发了&#xff…...

PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)

目录 一、打开数据库表 1. 写打开数据库的槽函数 2. 运行后发现数据库可以打开了 3. ODBC配通了&#xff0c;数据库还是打不开 4. 写在tableView上显示数据库表的函数 5. 运行后发现表可以显示了 6. 代码分析 7. 添加列名称 8. 根据内容调整列宽 9. 备注&#xff1a;…...

QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏

QT 串口调试工具第一节 虚拟串口工具安装第二节 QT创建一个基于QWidget的项目第三节 UI界面设计第三节 项目头文件widget.h第四节 项目实现文件widget.cpp第五节 main函数第六节 编译结果重点第七节 使用QT打包程序&#xff0c;不安装QT的电脑可使用第一节 虚拟串口工具安装 -…...

OpenSumi 是信创开发云的首选

原文作者&#xff1a;行云创新技术总监 邓冰寒 引言 随着云原生应用的日益普及&#xff0c;开发上云也逐步被越来越多的厂商和开发者接受&#xff0c;在这个赛道国内外有不少玩家&#xff0c;国外的 GitHub Codespaces、CodeSandbox&#xff0c;GitPod、亚马逊 Cloud9&#xf…...

JdbcTemplate常用方法解析

文章目录1.JdbcTemplate简介2.JdbcTemplate主要方法&#xff1a;3.常用方法介绍update()方法增删改query()查询方法1.JdbcTemplate简介 JdbcTemplate是Spring JDBC的核心类&#xff0c;借助该类提供的方法可以很方便的实现数据的增删改查。 Spring对数据库的操作在jdbc上面做…...

生物素标记试剂1869922-24-6,Alkyne-PEG3-Biotin PC,炔烃PEG3生物素PC

1、试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a;PC alkyne-PEG3-Biotin含一个炔烃和一个 PEG 链接的可光裂解生物素基团。含 3 个单元 PEG 的 ADC linker&#xff0c;生物素本身是个游离的小分子&#xff0c;在生物实验中常常…...

CS224W课程学习笔记(三):DeepWalk算法原理与说明

引言 什么是图嵌入&#xff1f; 图嵌入&#xff08;Graph Embedding&#xff0c;也叫Network Embedding&#xff09; 是一种将图数据&#xff08;通常为高维稠密的矩阵&#xff09;映射为低微稠密向量的过程&#xff0c;能够很好地解决图数据难以高效输入机器学习算法的问题。…...

rk3568 开发板Ubuntu系统说明

Ubuntu MinimalUbuntu Minimal系统基于Ubuntu 64bit系统构建&#xff0c;目前发布有Ubuntu18.04这个版本。与Ubuntu Desktop 相比具有以下特性&#xff1a;没有桌面环境&#xff0c;占用资源少&#xff0c;在简化网络管理之后&#xff0c;只需40M内存&#xff1b;针对嵌入式平台…...

Windows和Linux常用HASH算法使用命令

Windows和Linux常用hash算法使用命令 Windows&#xff0c;以文件xxx.zip为例 Windows 求文件 md5 certutil -hashfile xxx.zip md5Windows 求文件 sha1 certutil -hashfile xxx.zip sha1Windows 求文件 sha256 certutil -hashfile xxx.zip sha256Linux&#xff0c;以文件xxx.z…...

货仓选址 AcWing(JAVA)

在一条数轴上有 N家商店&#xff0c;它们的坐标分别为 A1∼AN。 现在需要在数轴上建立一家货仓&#xff0c;每天清晨&#xff0c;从货仓到每家商店都要运送商品。 为了提高效率&#xff0c;求把货仓建在何处&#xff0c;可以使得货仓到每家商店的距离之和最小。 输入格式&#…...

SPI+DMA传输性能比较

本文章仅仅简单记录32单片机的SPIDMA驱动显示屏的性能测试&#xff0c;这里不花费时间介绍SPI和DMA。 硬件材料&#xff1a;SPI显示屏一个&#xff0c;32单片机 软件材料&#xff1a; 1.LCD的SPI驱动显示程序&#xff08;SPI / SPIDMA&#xff09;&#xff1a; &#xff08;1&a…...

Centos7系统编译Hadoop3.3.4

1、背景 最近在学习hadoop&#xff0c;此篇文章简单记录一下通过源码来编译hadoop。为什么要重新编译hadoop源码&#xff0c;是因为为了匹配不同操作系统的本地库环境。 2、编译源码 2.1 下载并解压源码 [roothadoop01 ~]# mkdir /opt/hadoop [roothadoop01 ~]# cd /opt/had…...

pb并发控制

并发控制(一) 并发能力是指多用户在同一时间对相同数据同时访问的能力。一般的关系型数据库都具 有并发控制的能力,但是这种并发功能也会对数据的一致性带来危险。试想若有两个用 户都试图访问某个银行用户的记录并同时要求修改该用户的存款余额时,情况将会怎样 呢?我们可以…...

登录拦截器

文章目录前言一、interceptor1.interceptor 包下新建loginInterceptor.java2.config 包下新建 AdminWebConfig.java3.返回登录页面接收提示信息前言 本篇主要介绍spring框架里提供的 HandlerInterceptor 拦截器做登录拦截。 一、interceptor 1.interceptor 包下新建loginInte…...

STM32 - HAL库UART串口

1.串口初始化配置/******************************************************************************* Function: BSP_UART_Init Description: 串口初始化 Input: instance 串口号baudRate: 波特率 Output: 无 Return: 无 ************************************************…...

Vue3 的状态管理库(Pinia)

目录前言&#xff1a;一、什么是 Pinai二、安装与使用pinia三、什么是 store四、state1. 定义 state2. 组件中访问 state五、Getters1. 定义 Getters2. 在组件中使用 Getters六、Actions1. 定义Actions2. 组件中访问 Actions总结&#xff1a;前言&#xff1a; 在编写vue里的项目…...

信息系统项目管理师知识点汇总(2023最新)

信息系统项目管理师 信息系统项目管理师简介如何应对考试考试细节与学习 十大管理 十大管理四十七过程 信息化和信息系统 项目管理基础 项目整体管理 项目范围管理 项目进度管理 项目成本管理 项目质量管理 项目人力资源管理 项目沟通管理 项目干系人管理 项目风险…...

标题标题标题

图床&#xff08;Typora uPic/PicGo 七牛云&#xff09; 图床&#xff08;Typora uPic/PicGo 七牛云&#xff09; 笔者平时使用 Typora 编写 markdown 文档&#xff0c;文档中常常会放置图片&#xff0c;如果文档不需要分享的话&#xff0c;其实讲图片存放在本地就可以了…...

OKR学习总结二

总结 绩效管理不是进行事后管理&#xff0c;而是参与整个过程并进行实时把控。 我们将受益目标分为两个子目标&#xff1a; 新增收入和重复收入。第一部分目标由市场营销部承担&#xff0c;第二个目标则由产品部承担。 简而言之&#xff0c;文化是一系列价值观和信仰的体现&…...

MAC中docker搭建fastdfs

1:首先搭建Docker2:通过Docker搭建fastdfs&#xff08;1&#xff09;查找镜像打开终端通命令查找fastdfs的镜像docker search fastdfs&#xff08;二&#xff09;拉取镜像在找到合适的镜像后执行命令:docker pull delron/fastdfs&#xff08;三&#xff09; 创建storage和track…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...