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

【Java 8新特性】Stream API 和 Lambda 表达式

一、前言

  • Java 8 的 Stream API 和 Lambda 表达式 为集合处理带来了函数式编程风格,显著简化了代码并提高了可读性

二、Lambda 表达式

1.作用

  • 简化匿名内部类的语法,允许将函数作为参数传递
  • 实现函数式接口(只有一个抽象方法的接口),如 Runnable、Comparator。

2.示例

// 传统写法:匿名内部类
Comparator<String> oldComparator = new Comparator<>() {@Overridepublic int compare(String a, String b) {return a.length() - b.length();}
};// Lambda 写法
Comparator<String> lambdaComparator = (a, b) -> a.length() - b.length();

三、Stream API

1.作用

  • 提供声明式数据处理(如过滤、映射、排序、聚合)。
  • 支持链式操作(Lazy Evaluation),优化性能。
  • 并行处理(parallelStream())

四、实际应用场景及代码示例

场景1:筛选+转换

  • 需求:从一个用户列表中提取年龄 >18 的用户的邮箱,并按姓名排序。
List<User> users = Arrays.asList(new User("Alice", 20, "alice@example.com"),new User("Bob", 17, "bob@example.com"),new User("Charlie", 25, "charlie@example.com")
);List<String> emails = users.stream().filter(user -> user.getAge() > 18)         // 过滤条件.sorted(Comparator.comparing(User::getName)) // 按姓名排序.map(User::getEmail)                        // 提取邮箱.collect(Collectors.toList());              // 收集为列表System.out.println(emails); // 输出 [alice@example.com, charlie@example.com]

场景2:聚合统计

  • 需求:计算所有用户的平均年龄。
double averageAge = users.stream().mapToInt(User::getAge)  // 转为 IntStream(优化基本类型操作).average()               // 计算平均值.orElse(0);              // 如果无数据,默认返回 0
System.out.println(averageAge); // 输出 22.5

场景3:分组与映射

  • 需求:按年龄分组,并统计每组的邮箱数量。
Map<Integer, Long> ageToEmailCount = users.stream().collect(Collectors.groupingBy(User::getAge,                  // 按年龄分组Collectors.mapping(User::getEmail,            // 提取邮箱Collectors.counting()      // 统计数量)));
System.out.println(ageToEmailCount); // 输出 {20=1, 25=1}

场景4:并行处理

  • 需求:并行处理大数据集,筛选偶数并求和。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.parallelStream()      // 并行流.filter(n -> n % 2 == 0)            // 筛选偶数.mapToInt(Integer::intValue)        // 转为 int.sum();                             // 求和
System.out.println(sum); // 输出 30

五、核心优势

  • 代码简洁:链式调用替代多层循环和临时变量。
  • 可读性强:操作名称(如 filter、map)直接表达意图。
  • 性能优化:并行流自动利用多核 CPU。
  • 函数式风格:支持更灵活的数据处理逻辑。

六、注意事项

  • 副作用:避免在 Lambda 中修改外部变量(应使用不可变数据)。
  • 性能:小数据量用 stream(),大数据量用 parallelStream()。
  • 资源管理:Stream 是一次性的,终端操作后不能重复使用。

七、总结

  • 通过结合 Stream API 和 Lambda,Java 集合处理代码变得更加简洁、高效且易于维护

相关文章:

【Java 8新特性】Stream API 和 Lambda 表达式

一、前言 Java 8 的 Stream API 和 Lambda 表达式 为集合处理带来了函数式编程风格&#xff0c;显著简化了代码并提高了可读性。 二、Lambda 表达式 1.作用 简化匿名内部类的语法&#xff0c;允许将函数作为参数传递。实现函数式接口&#xff08;只有一个抽象方法的接口&…...

Vue 3 相比 Vue 2 的优势

1. 性能优化 更快的渲染&#xff1a; 基于 Proxy 的响应式系统&#xff0c;比 Vue 2 的 Object.defineProperty 更高效&#xff0c;初始化速度和内存占用优化显著。编译时优化&#xff08;如静态树提升、补丁标志等&#xff09;&#xff0c;减少运行时开销。 更小的体积&#…...

深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南

深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南 在现代 Java 应用中,ThreadLocal 被广泛用于线程隔离上下文,比如用户会话、链路追踪等。但随着线程池的普及,ThreadLocal 也暴露出严重局限性,尤其是在异步场景中上下文无法正确传递的问题。 本文从 Thr…...

入门 Go 语言

本专栏的 Go 语言学习参考了B站UP 软件工艺师的视频 本节需要&#xff1a; Go 语言环境VSCode 安装环境 下载 Go 环境&#xff0c;并安装下载 VSCode&#xff0c;安装。在 VSCode 中安装 Go 扩展&#xff1a; 接下来就可以编写 Go 语言了 第一条 Go Go 语言是一种编译型…...

膳食营养诊断活动:科技赋能,共筑全民健康新基石

膳食营养诊断活动&#xff1a;科技赋能&#xff0c;共筑全民健康新基石 一、活动背景&#xff1a;响应营养周号召&#xff0c;开启健康新征程 &#xff08;一&#xff09;2025营养周主题解读 2025年全民营养周的核心主题“吃动平衡&#xff0c;健康体重&#xff0c;全民行动…...

考拉悠然:科技与匠心,以烟草虫情AI监测系统共筑品质未来

李工&#xff0c;一位在卷烟厂辛勤耕耘了二十余载的老工艺师&#xff0c;他的青春和汗水&#xff0c;都挥洒在了这片弥漫着烟草香气的土地上。他像一位老农&#xff0c;精心呵护着每一片烟叶&#xff0c;因为他深知&#xff0c;烟草品质的把控&#xff0c;就是守护着卷烟厂的生…...

k8s基于角色的访问控制(RBAC)

Kubernetes&#xff08;k8s&#xff09;权限管理主要是基于角色的访问控制&#xff08;RBAC&#xff09;&#xff0c;以下是其核心内容&#xff1a; 核心概念 Role 和 ClusterRole Role &#xff1a;定义特定命名空间内的权限规则&#xff0c;用于在某个命名空间内设置访问权限…...

拆解华为Pura X新发现:“仿生”散热与钛合金“骨架”

拆解华为Pura X新发现&#xff1a;“仿生”散热与钛合金“骨架” 原创 黑毛警长008 AR圈 2025年04月24日 09:42 广东 01 引言&#xff1a;AI时代带来折叠屏新挑战 随着华为Pura X的发布&#xff0c;市场上已出现多家机构的拆解分析&#xff0c;但大多聚焦于芯片和电子组件层面…...

Typecho 访客统计插件最新版-前后台统计图均可显示

这是一个为 Typecho 博客系统开发的访客统计插件&#xff0c;基于原版的VistorLogger修改版本。该插件提供了详细的访问统计功能&#xff0c;包括访问国家/地区统计、IP分布等信息&#xff0c;并进行了隐私保护处理。 功能特点 独立页面模板显示访问国家/地区统计&#xff08…...

与智者同行:京东零售技术人的成长书单

我们正处在一个快速变化的时代&#xff0c;信息洪流奔涌而来&#xff0c;如何穿透纷繁的表象&#xff0c;理解世界的复杂性&#xff1f;又如何在充满不确定性的环境中&#xff0c;找到属于自己的方向&#xff1f; 阅读&#xff0c;是最从容的答案&#xff0c;让我们站在智者的…...

matplotlib1-画成对数据图

画图的类型 成对数据&#xff08;Pairwise data&#xff09; 成对形式的数据 (x, y)&#xff1b;表格形式的数据 (var_0, var_1, ..., var_n) &#xff1b;函数形式的数据 f(x) y 1. 绘图-plot(x, y) 以线条或标记的形式将 y 随 x 的变化情况绘制成图表。 2. 散点图-scatt…...

深入理解表单---提交用户与网页交互的重要方式:GET 与 POST 的本质区别与应用实践

在 Web 开发中&#xff0c;表单&#xff08;<form>&#xff09;是用户与网页交互的重要方式&#xff0c;而表单的 method 属性则决定了数据是如何发送到服务器的。本文将带你系统理解 GET 和 POST 请求方式的区别、使用场景与注意事项&#xff0c;并结合示例进行实战分析…...

VIVADO中单bit信号的跨时钟域处理(快时钟到慢时钟)

VIVADO中单bit信号的跨时钟域处理 同步触发器的约束&#xff0c;确保软件布局布线时把同步的触发器放到同一个SLICE中 目录 前言 一、快时钟的脉冲到慢时钟的同步方法一 1、正确结果 2、源时钟脉冲展宽组合逻辑输出不加触发器的风险 3、目的时钟采样组合逻辑输出不加触发器…...

解决 Windows10 下 UWP 应用无法使用本地代理

从Micorsoft Store下载的应用默认不允许使用本地代理(或者说就不允许访问localhost) 但是可以借助于系统自带的 CheckNetIsolation 工具来突破该限制 操作 找出要修改的应用 SID 在注册表 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Cur…...

实验三 进程间通信实验

一、实验目的 1、了解什么是信号。 2、熟悉LINUX系统中进程之间软中断通信的基本原理。 3、理解进程的同步关系。 4、掌握用信号实现进程间的同步操作。 5、了解什么是管道。 6、熟悉UNIX/LINUX支持的管道通信方式。 二、实验内容 1、阅读下列程序&#xff0c;执行程序…...

NHANES指标推荐:TyG-WHtR

文章题目&#xff1a;Can cardiovascular health and its modifiable healthy lifestyle offset the increased risk of all-cause and cardiovascular deaths associated with insulin resistance? DOI&#xff1a;10.1186/s12933-025-02674-z 中文标题&#xff1a;心血管健康…...

Winddows11官网下载安装VMware Workstation Pro17(图文详解)

Winddows11安装VMware17 1、官网下载2、安装3、总结 1、官网下载 官网地址 点击Products&#xff0c;滑到最下面&#xff0c;选择SEE DESKTOPP HYPERVISORS 选择 DOWNLOAD FUSION OR WORKSTATION 自动跳转到下面哪个服界面&#xff0c;注册 输入邮箱地址和图片下面的文字…...

YOLO训练时到底需不需要使用权重

1. 预训练权重的作用与本质 预训练权重&#xff08;Pretrained Weights&#xff09;是在大规模数据集上训练得到的模型参数。这些权重能够学习通用的特征模式&#xff0c;如边缘、纹理、形状等&#xff0c;从而帮助模型更快收敛并提高泛化能力。YOLO提供的官方预训练权重通常基…...

2025最新软件测试面试八股文(答案+文档+视频讲解)

1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&…...

SpringBoot整合AOP

没事做个Demo案例&#xff0c;首先看下项目结构&#xff1a; 第1步&#xff0c;导入依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 第2步…...

第16章:MCP服务端项目开发实战:对话系统

第16章:MCP服务端项目开发实战:对话系统 对话系统,尤其是聊天机器人和虚拟助手,是 AI Agent 最广泛的应用领域之一。然而,传统的对话系统常常面临挑战,如难以维持长对话连贯性、缺乏个性化交互、无法有效利用对话中积累的知识等。MCP(Memory, Context, Planning)框架为…...

JavaScript 页面刷新:从传统到现代的全面解析

在 Web 开发中&#xff0c;"刷新"是一个基础但极其重要的功能。本文将全面探讨页面刷新的实现方式&#xff0c;从传统方法到现代最佳实践&#xff0c;深入解析每一种方案的原理和适用场景&#xff0c;并给出实用代码示例。 一、理解页面刷新的本质 在 Web 开发中&am…...

2025年Google Play审核策略全面解析

大家好&#xff0c;我是老妙&#xff0c;出海十余年的老司机&#xff0c;目前在死磕google play上架这一块。 目前来说&#xff0c;上架这一块不管是合规产品还是不合规产品&#xff0c;都建议使用有在架包的老号&#xff0c;更稳定&#xff0c;上架的审核时间更短&#xff0c…...

使用PHP对接印度尼西亚股票市场

在本篇文章中&#xff0c;我们将介绍如何使用PHP语言与StockTV API接口对接&#xff0c;获取并处理印度尼西亚&#xff08;Indonesia&#xff09;的股票市场数据。我们将以查询IPO信息和查看涨跌排行榜为例&#xff0c;展示具体的操作流程。 准备工作 首先&#xff0c;确保您…...

第54讲:总结与前沿展望——农业智能化的未来趋势与研究方向

目录 一、本板块内容回顾:人工智能助力农业的多元化应用 ✅ 精准农业与AI ✅ 农业金融与AI ✅ AI与农业政策 ✅ 农业物联网与AI 二、前沿趋势与研究方向:迈向智能、可持续农业的未来 1. AIGC(生成式AI)在农业中的应用 2. 数字孪生农业:虚拟与现实的无缝对接 3. A…...

Go语言中包导入下划线的作用解析

在Go语言的代码中&#xff0c;有时会看到类似以下的导入语句&#xff1a; import _ "github.com/mattn/go-sqlite3"这种以下划线_开头的导入方式&#xff0c;显得有些特别&#xff0c;尤其是对于新手来说&#xff0c;可能会感到困惑&#xff0c;为什么要这样写&…...

Linux学习笔记之动静态库

相信点进这篇帖子的你一定在动静态库的学习中遇到了很多问题。笔者由于曾经囫囵吞枣地学习库的相关知识&#xff0c;导致在实际应用中漏洞百出。所以写下这篇帖子&#xff0c;为大家解答一些疑惑&#xff0c;同时也加强自己的学习印象。 一、库的理解 什么是库&#xff1f;我…...

生成运算树

目录 题目题目描述示例输入输出算法标签: 二叉树, d f s dfs dfs, 模拟, *递归下降算法思路代码*后续 A C AC AC代码 题目 题目描述 在某种脚本语言里&#xff0c;有一个形如 x(api-xn)eps 的运算表达式&#xff0c;该表达式由以下元素构成&#xff1a; 操作数&#xff1a;…...

为什么要提出Null-text Inversion

在传统扩散模型的反转过程中&#xff08;如DDIM Inversion&#xff09;&#xff0c;文本提示&#xff08;Prompt&#xff09;确实不直接影响反转过程&#xff0c;但Null-text Inversion的优化动机源于反转-重建后的图像在后续编辑时对文本的依赖性。以下分步骤详细解释&#xf…...

centos离线安装ssh

一、在有网络的环境中准备RPM包 1.在一台与离线机器相同版本和架构的CentOS系统上&#xff0c;安装必要工具&#xff1a; sudo yum install -y yum-utils 2.创建目录存放RPM包&#xff1a; mkdir /tmp/ssh_rpms 3.下载SSH相关包及其依赖 yumdownloader --resolve --destd…...

数据库安装和升级和双主配置

备份和导入数据 ./mysqldump -u root -p123321 test > test.sql rsync -av test.sql root192.168.0.212:/usr/local/mysql/ ./mysql -uroot -p test < …/test.sql sudo tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ sudo ln -sfn /usr/loca…...

React 的 useEffect 清理函数详解

React 的 useEffect 清理函数详解 useEffect 是 React 中用于处理副作用&#xff08;side effects&#xff09;的 Hook&#xff0c;清理函数&#xff08;Cleanup Function&#xff09;是 useEffect 中返回的一个函数&#xff0c;用于清理或撤销副作用。清理函数的主要目的是确…...

C++ Lambda 表达式

Lambda 表达式的完整语法如下&#xff1a; [capture](parameters) mutable -> return_type { body }[capture]&#xff08;捕获列表&#xff09;&#xff1a;指定外部变量如何被 Lambda 表达式捕获&#xff08;按值或按引用&#xff09;。 (parameters)&#xff08;参数列…...

MATLAB 中的图形绘制

一、线图 plot 函数用来创建x和y值的简单线图。 x 0 : 0.05 : 30; %从0到30&#xff0c;每隔0.05取一次值 y sin(x); plot(x,y,LineWidth,2) %若&#xff08;x&#xff0c;y&#xff0c;LineWidth&#xff0c;2&#xff09;可变粗 xlabel("横轴标题") ylab…...

深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret

目录 深度解析 Kubernetes 配置管理&#xff1a;如何安全使用 ConfigMap 和 Secret一、目录结构二、ConfigMap 和 Secret 的创建1. 创建 ConfigMapconfig/app-config.yaml&#xff1a;config/db-config.yaml&#xff1a; 2. 创建 Secretsecrets/db-credentials.yaml&#xff1a…...

【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建

本文章同步到我的个人博客网站&#xff1a;ElemenX-King&#xff1a;【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建 希望大家能使用此网站来进行浏览效果更佳&#xff01;&#xff01;&#xff01; 目录 一、异步FIFO1.1 异步FIFO的定义1.2 亚稳态1.3 异步FIFO关键技术…...

【含文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统

项目介绍 本课程演示的是一款 基于SpringBootVue的移动台账管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…...

C语言——函数

C语言——函数 函数的概念 函数&#xff1a;也叫子程序。C语言中的函数就是一个完成某项特定任务的一小段代码。C语言函数分类&#xff1a; 按照用户使用&#xff1a;库函数&#xff0c;自定义函数 按照参数的形式&#xff1a;无参函数&#xff0c;有参函数 按照是否有返回值…...

网络安全 | F5 WAF 黑白名单配置实践指南

关注&#xff1a;CodingTechWork 引言 在现代网络安全架构中&#xff0c;F5 Web Application Firewall (WAF) 是保护 Web 应用免受攻击的重要工具。F5 WAF 提供了强大的黑白名单功能&#xff0c;结合 Data Group 和 iRules&#xff0c;可以实现更灵活、更高效的流量控制策略。…...

黑马 redis面试篇笔记

redis主从 version: "3.2"services:r1:image: rediscontainer_name: r1network_mode: "host"entrypoint: ["redis-server", "--port", "7001"]r2:image: rediscontainer_name: r2network_mode: "host"entrypoint:…...

报错_NoSuchMethodException: cn.mvc.entity.User.<init>()

org.springframework.beans.BeanInstantiationException: Failed to instantiate [cn.mvc.entity.User]: No default constructor found; nested exception is java.lang.NoSuchMethodException: cn.mvc.entity.User.<init>() 添加一个无参的构造器即可&#xff01; pub…...

【无人机】无人机遥控器设置与校准,飞行模式的选择,无线电控制 (RC) 设置

目录 1、遥控器校准 1.1、校准步骤 2、飞行模式选择&#xff0c;遥控器通道映射 2.1、配置步骤 1、遥控器校准 在校准无线电系统之前&#xff0c;必须连接/绑定接收器和发射器。绑定发射器和接收器对的过程是特定于硬件的&#xff08;有关说明&#xff0c;请参阅 RC 手册&…...

基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案

一、核心硬件架构设计‌ ‌高性能算力引擎&#xff08;RK3588 处理器&#xff09;‌ ‌异构计算架构‌&#xff1a;集成 8 核 CPU&#xff08;4Cortex-A762.4GHz 4Cortex-A551.8GHz&#xff09;&#xff0c;支持动态调频与多任务并行处理&#xff0c;单线程性能较传统四核方案…...

上岸率85%+,25西电先进材料与纳米科技学院(考研录取情况)

1、先进材料与纳米科技学院各个方向 2、先进材料与纳米科技学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、材料科学与工程25年相较于24年上升10分&#xff0c;为290分 2、材料与化工&#xff08;专硕&#xff09;25年相较于24年下降20分&#xff0c;为…...

10天学会嵌入式技术之51单片机-day-7

第十六章 UART通信 16.1 UART 概述 16.1.1 前置基础 想要理解和使用 UART&#xff0c;需要先了解一些通讯领域的术语&#xff0c;如下 。 &#xff08;1&#xff09;串行通讯和并行通讯 串行通讯和并行通讯是数据传输的两种主要方式&#xff0c;两者的区别如下。 &#xff…...

w~视觉~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12327888 #几个论文 Fast Charging of Energy-dense Lithium-ion Batteries Real-time Short Video Recommendation on Mobile Devices Semantic interpretation for convolutional neural networks: What makes a ca…...

AI在论文评审中的应用与工具推荐

一、AI在论文评审中的核心应用场景 内容质量评估与逻辑校验 • 核心论点识别&#xff1a;AI可快速定位论文核心创新点&#xff0c;并验证其与文献综述、实验数据的逻辑一致性&#xff08;如知网研学的“文献矩阵分析”功能&#xff09;。 • 方法论合理性检测&#xff1a;自动识…...

怎样记忆Precision、Recall?

首先&#xff0c;明确符号&#xff1a; TP(True Posive)&#xff1a;标签为正&#xff0c;预测为正 TN(True Negative)&#xff1a;标签为负&#xff0c;预测为负 FP(False Positive)&#xff1a;标签为负&#xff0c;预测为正 FN(False Negative)&#xff1a;标签为正&#xf…...

【刷题】第三弹——二叉树篇(上)

文章目录 一.相同的树二. 另一棵树的子树三. 翻转二叉树四. 对称二叉树五. 平衡二叉树六. 二叉搜索树七. 二叉树的遍历 一.相同的树 检查两棵树是否相同 思路: 1.先比较结构 结构不一样直接false 2.结构一样,在比较值 public boolean isSameTree(TreeNode p, TreeNode q) {if…...

【Canvas与标志】红黄渐变阴影太极图

【成图】 120*120的png图标 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>红黄渐变阴影太极图 Draft1&l…...