当前位置: 首页 > 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…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...