05_jdk8新特性
文章目录
- 一、jdk8新特性
- 1. Lambda表达式
- 2. Stream API
- 3. 函数式接口
- 4. 默认方法
- 5. 方法引用
- 6. 新的日期和时间API
- 7. Optional类
- 8. 并发增强
- 二、常用函数式接口
- 1.` Supplier<T>`
- 2. `Consumer<T>`
- 3. `Function<T,R>`
- 4.` Predicate<T>`
一、jdk8新特性
JDK 8(Java Development Kit 8)为Java语言带来了许多新特性和改进,这些新特性极大地增强了Java的功能和灵活性。以下是JDK 8的一些主要新特性及其代码示例:
1. Lambda表达式
Lambda表达式是JDK 8引入的最重要的新特性之一,它允许以简洁和函数式的方式编写代码。Lambda表达式使得代码更易读、易写,并且可以提升代码的可维护性。
代码示例:
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(item -> System.out.println(item));
2. Stream API
Stream API是JDK 8中引入的一套用于处理集合和数组的新API。它提供了一种流式处理的方式,可以更方便地对数据进行操作和处理。Stream API支持并行处理,可以提高程序的执行效率。
代码示例:
List<String> names = Arrays.asList("Tom", "Jerry", "Tony");
List<String> result = names.stream().filter(name -> name.startsWith("T")).map(String::toUpperCase).collect(Collectors.toList());
3. 函数式接口
函数式接口是只包含一个抽象方法的接口。JDK 8引入了函数式接口的概念,并且可以通过@FunctionalInterface注解来标记,以确保它只包含一个抽象方法。函数式接口的引入使得Java支持函数式编程,可以更方便地使用Lambda表达式。
代码示例:
@FunctionalInterface
public interface MyFunc {int doSomething(int x);
}
4. 默认方法
在JDK 8之前,接口只能包含抽象方法和常量。JDK 8引入了默认方法的概念,可以在接口中实现方法的默认实现。默认方法可以在接口中提供一个默认的实现,从而避免因为接口的改变而导致实现类需要进行修改。
代码示例:
interface MyInterface {default void hello() {System.out.println("Hello from interface");}
}
5. 方法引用
方法引用是一种更简洁地表示Lambda表达式的方式。它允许直接引用已经存在的方法,而不是通过Lambda表达式来实现。方法引用可以提高代码的可读性和可维护性,同时减少重复代码的编写。
代码示例:
list.forEach(System.out::println);
6. 新的日期和时间API
JDK 8引入了一套全新的日期和时间API,用于替代旧的Date和Calendar类。新的日期和时间API更加简单易用,并且提供了更多的功能。它支持日期、时间、时区、时间间隔等的处理,同时提供了更多的操作方法和格式化选项。
代码示例:
LocalDate today = LocalDate.now();
LocalDate birth = LocalDate.of(2000, 1, 1);
Period age = Period.between(birth, today);
System.out.println("年龄: " + age.getYears());
7. Optional类
Optional是JDK 8新增的容器类,用于解决null值处理问题。它可以包装一个可能为空的对象,并提供一系列的操作来处理该对象。使用Optional类可以避免空指针异常,提高代码的健壮性。
代码示例:
Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(System.out::println);
String defaultName = name.orElse("默认值");
8. 并发增强
JDK 8对并发编程进行了增强,引入了一些新的并发工具和类,如CompletableFuture类、StampedLock类等。这些增强使得开发人员能够更好地处理并发问题,提高程序的性能和可伸缩性。
代码示例(CompletableFuture):
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {// 异步任务System.out.println("异步任务执行");
});future.thenRun(() -> {// 异步任务完成后的操作System.out.println("异步任务完成后执行");
});
二、常用函数式接口
在Java中,Supplier
、Consumer
、Function
和Predicate
等函数式接口是Java 8引入的重要特性,它们位于java.util.function
包中。这些接口通常与Lambda表达式和方法引用一起使用,以简化代码并提高可读性。以下是这些函数式接口的具体应用示例:
1. Supplier<T>
Supplier<T>
接口用于提供一个结果,但不接受任何参数。它通常用于延迟生成对象或值。
应用示例:
import java.util.function.Supplier;public class SupplierExample {public static void main(String[] args) {// 创建一个Supplier,用于生成当前时间Supplier<String> currentTimeSupplier = () -> java.time.LocalTime.now().toString();// 使用Supplier获取结果System.out.println("Current time: " + currentTimeSupplier.get());}
}
在这个例子中,currentTimeSupplier
是一个Supplier<String>
,它使用Lambda表达式来生成当前时间的字符串表示。
2. Consumer<T>
Consumer<T>
接口用于接受一个输入参数并执行某些操作,但不返回结果。
应用示例:
import java.util.Arrays;
import java.util.function.Consumer;public class ConsumerExample {public static void main(String[] args) {// 创建一个Consumer,用于打印字符串Consumer<String> printConsumer = System.out::println;// 使用Consumer处理集合中的每个元素Arrays.asList("Hello", "World").forEach(printConsumer);}
}
在这个例子中,printConsumer
是一个Consumer<String>
,它使用方法引用来打印字符串。然后,我们使用forEach
方法和printConsumer
来处理集合中的每个元素。
3. Function<T,R>
Function<T,R>
接口用于接受一个输入参数并返回一个结果。它可以将输入参数映射到另一个结果。
应用示例:
public class ServiceUtils {public static <T extends BaseDomain> int addAndUpdate(T domainObj,Function<Long, T> selectByPrimaryKey,Function<T, Integer> updateByPrimaryKeySelective,Function<T, Integer> insertSelective) {if (domainObj.getId() != null && selectByPrimaryKey.apply(domainObj.getId()) != null) {domainObj.setUpdatedBy(SecurityUtils.getCurrentUsername());domainObj.setUpdatedTime(LocalDateTime.now());return updateByPrimaryKeySelective.apply(domainObj);} else {domainObj.setStatus(1);domainObj.setInactiveFlag(false);domainObj.setCreatedBy(SecurityUtils.getCurrentUsernameTryCatch());domainObj.setCreatedTime(LocalDateTime.now());return insertSelective.apply(domainObj);}}
}// 调用:通过传入拥有公共字段(id、status、inactiveFlag等)实体类对象、主键查询方法、更新方法、插入方法,将新增或修改方法的调用统一判断处理
public int addAndUpdate(CurveRange range) {return ServiceUtils.addAndUpdate(range,mapper::selectByPrimaryKey,mapper::updateByPrimaryKeySelective,mapper::insertSelective);}
在这个例子中,intToStringFunction
是一个Function<Integer, String>
,它使用方法引用来将整数转换为字符串。然后,我们使用apply
方法进行转换并打印结果。
4. Predicate<T>
Predicate<T>
接口用于接受一个输入参数并返回一个布尔值结果。它通常用于判断输入参数是否满足某种条件。
应用示例:
import java.util.Arrays;
import java.util.function.Predicate;public class PredicateExample {public static void main(String[] args) {// 创建一个Predicate,用于判断整数是否为偶数Predicate<Integer> isEvenPredicate = i -> i % 2 == 0;// 使用Predicate过滤集合中的元素Arrays.asList(1, 2, 3, 4, 5).stream().filter(isEvenPredicate).forEach(System.out::println);}
}
在这个例子中,isEvenPredicate
是一个Predicate<Integer>
,它使用Lambda表达式来判断整数是否为偶数。然后,我们使用stream
、filter
和forEach
方法来过滤集合中的元素并
相关文章:
05_jdk8新特性
文章目录 一、jdk8新特性1. Lambda表达式2. Stream API3. 函数式接口4. 默认方法5. 方法引用6. 新的日期和时间API7. Optional类8. 并发增强 二、常用函数式接口1. Supplier<T>2. Consumer<T>3. Function<T,R>4. Predicate<T> 一、jdk8新特性 JDK 8&a…...
解决IDEA Maven编译时@spring.profiles.active@没有替换成具体环境变量的问题
如果不加filtering true,编译后的文件还是 spring.profiles.active 编译前的application.yml 编译后的application.yml【环境变量没有改变】 解决方案 找到 SpringBoot 启动类所在的pom.xml,在 resources 增加 filtering true,然后重新…...
HTML17:表单初级验证
表单初级验证 常用方式 placeholder 提示信息 <p>名字:<input type"text" name"username" maxlength"8" size"30" placeholder"请输入用户名"></p>required 非空判断 <p>名字:<input type"…...
vue3+dhtmlx-gantt实现甘特图展示
最终效果 数据源demo {"data": [{"actual_end_date": "2025-04-23","actual_start_date": "2025-04-15","duration": 10,"end_date": "2025-05-01","id": "2|jvUiek",&…...
Jupyter-AI Pandas-AI本地使用功能优化
引言 Jupyter-ai 和 Pandas-ai 的优化主要是个人工作遇到的需求,个人觉得是一个不错的体验优化,所以进行分享仅供参考,不喜勿喷,共同进步!Jupyter-AI优化主要包含以下方向(当前已实现): Jupyter-AI中 Chat 扩展和 NoteBook 的 Cell 工作去部分,使用的Language Model 和 …...
Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用
Model.eval() 与 torch.no_grad(): PyTorch 中的区别与应用 在 PyTorch 深度学习框架中,model.eval() 和 torch.no_grad() 是两个在模型推理(inference)阶段经常用到的函数,它们各自有着独特的功能和应用场景。本文将详细解析这两…...
mac M2下的centos8:java和jenkins版本匹配,插件安装问题
java和jenkins版本匹配如下: Java Support Policy 如果版本不匹配,jenkins无法正常启动,插件也无法安装成功。 实际操作过程发现:表格也并不全然正确,还是需要特定的版本才能正常 参考如下: jenkins安装…...
PyTorch 中的 Autograd 实现细节解析和应用
摘要: 本文深入探讨 PyTorch 框架的核心组件之一——Autograd 机制。我们将解析其内部工作原理,包括计算图的构建、梯度的计算与传播,并探讨其在神经网络训练、模型调试及可解释性等方面的广泛应用。 通过理解 Autograd 的实现细节,开发者可以更高效地利用 PyTorch 进行深度…...
【AI提示词】波特五力模型专家
提示说明 具备深入对企业竞争环境分析能力的专业人士。 提示词 # Role:波特五力模型专家## Profile - language:中文 - description:具备深入对企业竞争环境分析能力的专业人士 - background:熟悉经济学基础理论,擅长用五力模型分析行业竞争 - personality…...
python 的 uv、pip 和 conda 对比和技术选型
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
《Python星球日记》 第63天:文本方向综合项目(新闻分类)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、项目需求分析1. 项目背景与目标2. 功能需求3. 技术方案概述 二、数据清洗与…...
面试题:请解释Java中的设计模式,并举例说明单例模式(Singleton Pattern)的实现方式
Java中的设计模式 设计模式是在软件开发过程中针对特定场景而使用的通用解决方案。设计模式可以帮助开发者编写出更加清晰、灵活和可维护的代码。设计模式分为三大类: 创建型模式:用于对象的创建过程,如单例模式、工厂模式、建造者模式等。…...
MySQL全量、增量备份与恢复
目录 一:MySQL数据库备份概述 1.数据备份的重要性 2.数据库备份类型 2.1从物理与逻辑的角度分类 物理备份 逻辑备份 2.2从数据库的备份策略角度分类 完全备份 差异备份 增量备份 3.常见的备份方法 3.1物理冷备份 3.2专用备份工具 MySQL dump或MySQL hot…...
rust 全栈应用框架dioxus server
接上一篇文章dioxus全栈应用框架的基本使用,支持web、desktop、mobile等平台。 可以先查看上一篇文章rust 全栈应用框架dioxus👈 既然是全栈框架,那肯定是得有后端服务的,之前创建的服务没有包含后端服务包,我们修改…...
Clinica集成化的开源平台-神经影像研究
Clinica集成化的开源平台-神经影像研究 🌟 Clinica集成化的开源平台-神经影像研究引言 🛠️ 一、环境搭建与数据准备1. 安装Clinica(附避坑指南)2. 数据标准化(BIDS格式处理) 🧠 二、sMRI预处理…...
LabVIEW中算法开发的系统化解决方案与优化
在 LabVIEW 开发环境中,算法实现是连接硬件数据采集与上层应用的核心环节。由于图形化编程范式与传统文本语言存在差异,LabVIEW 中的算法开发需要特别关注执行效率、代码可维护性以及与硬件资源的适配性。本文从算法架构设计、性能优化到工程实现&#x…...
【Pandas】pandas DataFrame cov
Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...
【递归、搜索与回溯】专题一:递归(一)
📝前言说明: 本专栏主要记录本人递归,搜索与回溯算法的学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码…...
pythonocc 拉伸特征
micromamba install -c conda-forge pythonocc-core opencascade.js安装不起来,ai用pythonocc练个手 拉伸线框 线成面 from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire f…...
防爆手机与普通手机有什么区别
在石油化工、矿山能源、危化品运输等特殊行业中,一部手机的选择可能直接关系到生产安全与人员生命。防爆手机作为工业安全通信的核心工具,与日常使用的普通手机存在本质差异。本文将从技术原理、安全标准、功能设计及适用场景等维度,解析二者…...
动手学深度学习12.3.自动并行-笔记练习(PyTorch)
以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:无 本节教材地址:12.3. 自动并行 — 动手学深度学习 2.0.0 documentation 本节开源代…...
第二十二天打卡
数据预处理 import pandas as pd from sklearn.model_selection import train_test_splitdef data_preprocessing(file_path):"""泰坦尼克号生存预测数据预处理函数参数:file_path: 原始数据文件路径返回:preprocessed_data: 预处理后的数据集""&quo…...
SET NX互斥功能的实现原理
Redis 的 SET key value NX 命令通过其原子性和底层数据结构的特性实现互斥功能,具体实现如下: 1. 互斥功能的实现原理 SET NX 的核心是 原子性操作:当且仅当键(key)不存在时,才会设置键的值。Redis 的单线…...
前端 CSS 样式书写与选择器 基础知识
1.CSS介绍 CSS是Cascading Style Sheet的缩写,中文意思为"层叠样式表",它是网页的装饰者,用来修饰各标签 排版(大小、边距、背景、位置等)、改变字体的样式(字体大小、字体颜色、对齐方式等)。 2.CSS书写位置 2.1 样式表特征 层…...
一小时学会Docker使用!
文章目录 前言一、安装ssh连接工具二、安装docker三、Docker常见命令四、docker-compose使用 前言 Docker: Docker简单来说就是简化环境配置的,我们配置环境只需要简单的docker pull,docker run即可,而删除环境也很容易ÿ…...
android studio开发aar插件,并用uniapp开发APP使用这个aar
android studio开发aar插件,并用uniapp开发APP使用这个aar 使用android studio打包aar和Unity导入aar详解...
操作系统实战——QEMU模拟器搭建【rCore 操作系统】
操作系统大作业——QEMU模拟器搭建rCore操作系统 按照本篇步骤走,帮你少走很多弯路!博主在自己做的过程中踩了很多坑,过程还是很痛苦的,走了很多弯路,现在都已经在文章中把坑填平了,把弯路修直了。 创作不易…...
web:InfiniteScroll 无限滚动
InfiniteScroll 无限滚动 分页加载 <div class"data-box" v-infinite-scroll"loadMore"> <li v-fori in dataList></li> </div>form: {current: 1,size: 10,}loadMore(){console.log(this.dataList.length, this.total ,8888)if…...
【Redis 进阶】哨兵模式
思维导图: 一、哨兵模式概述 (一)传统主从复制模式的局限性 在传统的Redis主从复制架构中,若主节点发生故障,运维人员需手动执行故障转移操作,将一个从节点提升为新主节点,并逐一通知所有客户…...
告别卡顿,图片查看界的“速度与激情”
嘿,小伙伴们!今天电脑天空给大家介绍一款超好用的图片查看神器——ImageGlass!这可不是普通的图片查看软件哦,它简直就是图片界的“全能王”。首先,它能打开的图片格式多到让你眼花缭乱,什么PNG、JPEG、GIF…...
02_线性模型(回归分类模型)
用于分类的线性模型 线性模型也广泛应用于分类问题,可以利用下面的公式进行预测: $ \widehat y w[0]*x[0]w[1]*x[1]…w[p]*x[p]b > 0$ 公式看起来与线性回归的公式非常相似,但没有返回特征的加权求和,而是为预测设置了阈值…...
力扣2094题解
记录: 2025.5.12 题目: 思路: 暴力遍历。 解题步骤: 1.统计数字出现次数:使用数组cnt来记录输入数组中每个数字的出现次数。 2.生成三位偶数:通过循环从100开始,每次递增2,生成…...
人物角色设定机制
模块一:角色塑造进阶技巧 将角色设定(Character Headcanon)提升至更高层次 当您通过Character Headcanon Generator生成基础设定后,可运用以下专业技巧深化角色塑造: 情感核心图谱分析法 解构角色情感驱动机制及其情境表现: 主…...
Python动态渲染页面抓取之Selenium使用指南
目录 一、Selenium技术架构解析 二、环境搭建与基础配置 1. 组件安装 2. 驱动配置 3. 基础操作模板 三、动态内容抓取核心策略 1. 智能等待机制 2. 交互行为模拟 3. 反爬应对方案 四、实战案例:电商评论抓取 五、性能优化与异常处理 2. 异常捕获 六、进…...
智能手表 MCU 任务调度图
智能手表 MCU 任务调度图 处理器平台:ARM Cortex-M33 系统架构:事件驱动 多任务 RTOS RTOS:FreeRTOS(或同类实时内核) 一、任务调度概览 任务名称优先级周期性功能描述App_MainTask中否主循环调度器,系统…...
【C++】cout的格式输出
目录 一、cout的格式输出1、控制宽度和填充2、控制数值格式3、控制整数格式4、控制对齐方式 个人主页<—请点击 C专栏<—请点击 一、cout的格式输出 printf函数在输出数据的时候,可以指定格式来输出,比如:指定宽度、指定小数点后的位…...
私域流量新阵地:掌握Telegram私域运营全方法
在流量获取成本不断上升的今天,越来越多企业和品牌开始将目光转向“私域流量”——一条可以长期沉淀用户、反复转化的可持续增长之路。而在全球化趋势下,Telegram作为一款以高自由度、强隐私性著称的即时通讯平台,正在成为私域运营的新阵地。…...
Python Day23 学习
继续SHAP图绘制的学习 1. SHAP特征重要性条形图 特征重要性条形图(Feature Importance Bar Plot)是 SHAP 提供的一种全局解释工具,用于展示模型中各个特征对预测结果的重要性。以下是详细解释: 图的含义 - 横轴:表示…...
《ATPL地面培训教材13:飞行原理》——第12章:飞行力学基础
翻译:Leweslyh;工具:Cursor & Cluade 3.7;过程稿 第12章:飞行力学基础 目录 引言直线水平稳定飞行尾翼和升降舵直线稳定爬升爬升角重量、高度和温度的影响带动力下降紧急下降滑翔滑翔下降率转弯非对称推力飞行最…...
数据中台整体建设方案规划设计方案,数据中台建设汇报方案(PPT)
中台建设背景 在数字化转型浪潮下,企业需通过客户需求精准化、营销策略智能化、管理体系数字化三大核心方向构建竞争优势。本项目以渠道数据整合为基础,围绕客户精准化运营、营销智能化决策、管理数字化赋能三大目标,打造支撑一线业务场景的数…...
嵌入式软件--stm32 DAY 6 USART串口通讯(下)
1.寄存器轮询_收发字符串 通过寄存器轮询方式实现了收发单个字节之后,我们趁热打铁,争上游,进阶到字符串。字符串就是多个字符。很明显可以循环收发单个字节实现。 然后就是接收字符串。如果接受单个字符的函数放在while里,它也可…...
Flask如何读取配置信息
目录 一、使用 app.config 读取配置 二、设置配置的几种方式 1. 直接设置 2. 从 Python 文件加载 3. 从环境变量加载 4. 从字典加载 5. 从 .env 文件加载(推荐开发环境用) 三、读取配置值 四、最佳实践建议 在 Flask 中读取配置信息有几种常见方…...
AWS EC2源代码安装valkey命令行客户端
sudo yum -y install openssl-devel gcc wget https://github.com/valkey-io/valkey/archive/refs/tags/8.1.1.tar.gz tar xvzf 8.1.1.tar.gz cd valkey-8.1.1/ make distclean make valkey-cli BUILD_TLSyes参考 Connecting to nodes...
项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台
目录 思维导图 前置知识 Docker是什么? Docker的核心概念: Docker在本项目中的作用 1. 环境隔离与一致性 2. 简化部署流程 3. 资源管理与扩展性 4. 服务整合与通信 5. 版本控制和回滚 6. 开发与生产环境一致性 总结 前端 1.小程序 2.web …...
如何快速入门大模型?
学习大模型的流程是什么 ? 提示词工程:只需掌握提问技巧即可使用大模型,通过优化提问方式获得更精准的模型输出套壳应用开发:在大模型生态上开发业务层产品(如AI主播、AI小助手等),只需调用API…...
《Flutter社交应用暗黑奥秘:模式适配与色彩的艺术》
暗黑模式已从一种新奇的功能演变为用户体验中不可或缺的一环。对于Flutter开发者而言,如何在社交应用中完美实现暗黑模式适配与色彩对比度优化,是一场充满挑战与惊喜的技术探索之旅。 暗黑模式,绝非仅仅是将界面颜色反转这么简单。从用户体验…...
【秣厉科技】LabVIEW工具包——OpenCV 教程(21):CUDA 加速方案
文章目录 前言一、方案总述二、改造步骤三、编程范例四、应用移植总结 前言 需要下载安装OpenCV工具包的朋友,请前往 此处 ;系统要求:Windows系统,LabVIEW>2018,兼容32位和64位。 一、方案总述 为了保持轻量化与普…...
flutter使用命令生成BinarySize分析图
flutter build ios --analyze-size 生成的文件,使用dev tools 可以分析具体的包大小...
高并发场景下的BI架构设计:衡石分布式查询引擎与缓存分级策略
在电商大促、金融交易时段或IoT实时监控场景中,企业BI系统常面临瞬时万级并发查询的冲击——运营团队需要实时追踪GMV波动,风控部门需秒级响应欺诈检测,产线监控需毫秒级反馈设备状态。传统单体架构的BI系统在此类场景下极易崩溃,…...
web 自动化之 selenium 下拉鼠标键盘文件上传
文章目录 一、下拉框操作二、键盘操作三、鼠标操作四、日期控件五、滚动条操作六、文件上传七、定位windows窗口及窗口的元素总结:页面及元素常用操作 一、下拉框操作 from selenium.webdriver.support.select import Select import time from selenium.webdriver.…...