Java中Lambda Stream详解

Java中Lambda Stream详解

Java中Lambda / Stream详解


🔥 一、Lambda 是什么?(核心概念)

根据资料 LabExDEV Community

Lambda 是 Java 8 引入的匿名函数,用来简化只有一个抽象方法的接口(函数式接口)的写法。

换句话说:
Lambda = 更简洁的函数写法
Lambda = 传递行为(函数)而不是传递对象

📌 Lambda 的基本语法

(parameters)-> expression (parameters)->{ statements }

📌 示例:传统写法 vs Lambda

传统写法(匿名类)
newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println("Hello");}}).start();
Lambda 写法
newThread(()->System.out.println("Hello")).start();

更短、更清晰。


🔥 二、Lambda 的本质:函数式接口

资料 DEV Community指出:

Lambda 必须依附于“函数式接口”(只包含一个抽象方法的接口)。

常见函数式接口:

  • Runnable
  • Callable
  • Comparator
  • Predicate<T>
  • Function<T,R>
  • Consumer<T>
  • Supplier<T>

示例:

Predicate<Integer> isEven = n -> n %2==0;

🔥 三、Stream 是什么?(核心概念)

根据资料 LabExBaeldungStack Abuse

Stream 是对集合进行声明式(非命令式)处理的 API,支持链式操作、并行处理、惰性求值。

Stream 不是集合,它不存储数据,只是数据的“流水线”。


🔥 四、Stream 的三大步骤

资料 Baeldung指出 Stream 的典型结构:

1️⃣ 创建 Stream

List<Integer> list =List.of(1,2,3);Stream<Integer> s = list.stream();

2️⃣ 中间操作(返回 Stream)

  • filter
  • map
  • sorted
  • distinct
  • limit
  • skip

3️⃣ 终止操作(返回结果)

  • collect
  • forEach
  • reduce
  • count
  • findFirst

🔥 五、Lambda + Stream 实战详解

⭐ 1. filter(过滤)

资料 LabExBaeldungStack Abuse都强调 filter 是最常用的操作。

List<Integer> nums =List.of(1,2,3,4,5,6);List<Integer> even = nums.stream().filter(n -> n %2==0).toList();

⭐ 2. map(映射)

把一个值转换成另一个值。

List<String> names =List.of("a","bb","ccc");List<Integer> lengths = names.stream().map(s -> s.length()).toList();

⭐ 3. sorted(排序)

List<Integer> sorted = nums.stream().sorted((a,b)-> b - a).toList();

⭐ 4. reduce(聚合)

int sum = nums.stream().reduce(0,(a,b)-> a + b);

⭐ 5. collect(收集)

List<String> upper = names.stream().map(String::toUpperCase).collect(Collectors.toList());

🔥 六、Stream 的特性(必须掌握)

1️⃣ 惰性求值(Lazy Evaluation)

中间操作不会立即执行,只有终止操作才会触发。

2️⃣ 不修改原集合(函数式思想)

Stream 是不可变的。

3️⃣ 可并行(parallelStream)

list.parallelStream().filter(...).map(...).toList();

🔥 七、Lambda 与 Stream 的最佳实践(来自资料 Java Guides

✔ 写法简洁但不要过度链式

避免一行写 10 个操作,可读性会变差。

✔ 避免在 Stream 中写复杂逻辑

Stream 适合“数据转换”,不适合复杂业务。

✔ 优先使用方法引用(更清晰)

list.stream().map(String::toUpperCase)

✔ 不要滥用 parallelStream

并行流适合 CPU 密集型任务,不适合 IO。


🔥 八、完整示例:从集合到结果的全流程

List<String> names =List.of("Alice","Bob","Charlie","David");List<String> result = names.stream().filter(n -> n.length()>3)// 过滤.map(String::toUpperCase)// 转换.sorted()// 排序.toList();// 收集

输出:

[Alice, Charlie, David] → [ALICE, CHARLIE, DAVID] 

📚 引用来源

  • LabExLabEx:Java Lambda 与 Stream 过滤教程
  • DEV CommunityDev.to:Lambda、函数式接口、Stream 深度解析
  • BaeldungBaeldung:Stream.filter 使用指南
  • Stack AbuseStackAbuse:Stream + Lambda 过滤示例

Read more

Java 大视界 -- 基于 Java 的大数据可视化在企业人力资源管理与人才发展战略制定中的应用实战(432)

Java 大视界 -- 基于 Java 的大数据可视化在企业人力资源管理与人才发展战略制定中的应用实战(432)

Java 大视界 -- 基于 Java 的大数据可视化在企业人力资源管理与人才发展战略制定中的应用实战(432) * 引言: * 正文: * 一、企业人力资源管理的核心痛点与可视化价值 * 1.1 行业核心痛点(基于德勤《2024 人力资源数字化转型报告》) * 1.2 Java 大数据可视化的核心价值(实战验证适配性) * 二、技术架构设计实战 * 2.1 核心技术栈选型(生产压测验证版) * 三、核心可视化场景实战(附完整代码) * 3.1 场景一:核心人才流失预警看板 * 3.1.1 业务需求 * 3.1.2 数据准备(Flink SQL 指标计算) * 3.1.3 可视化实现代码(

By Ne0inhk
【Java Web学习 | 第15篇】jQuery(万字长文警告)

【Java Web学习 | 第15篇】jQuery(万字长文警告)

🌈个人主页: Hygge_Code🔥热门专栏:从0开始学习Java | Linux学习| 计算机网络💫个人格言: “既然选择了远方,便不顾风雨兼程” 文章目录 * 从零开始学 jQuery * jQuery 核心知识🥝 * 一、jQuery 简介:为什么选择它? * 1. 核心用途 * 2. 核心优势 * 3. 下载与引入 * 二、jQuery 语法:基础与选择器 * 1. 常用选择器 * 2. ready 方法:确保文档加载完成 * 三、DOM 元素操作:内容、属性、样式 * 1. 操作元素内容 * 2. 操作元素属性 * 3. 操作元素样式 * (1)操作宽度与高度 * (2)

By Ne0inhk
我的世界Java版1.21.4的Fabric模组开发教程(二十三)创建生物(下)实体在游戏中的实现(1)

我的世界Java版1.21.4的Fabric模组开发教程(二十三)创建生物(下)实体在游戏中的实现(1)

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第二十三章——创建生物(下)实体在游戏中的实现(1)。如果还未开始制作生物的外观和动画,请参考我的世界Java版1.21.4的Fabric模组开发教程(二十二)创建生物(上)实体外观与动画设计。想要阅读其他内容,请查看或订阅上面的专栏。 在上一章节中,我们完成了测试生物(test_entity) 的外观与动画设计,并导出了实体模型文件、实体动画文件和实体平面展开图。接下来,我们将使用这些文件,将生物真正的加入到游戏中。 即使在前一章中完成了创建实体的准备工作,想要在游戏中添加实体依然非常繁琐。一般,我们按照下面每个步骤需要完成的具体工作为顺序依次推进: * 注册实体模型层 * 创建实体模型层静态常量; * 编写实体渲染状态类; * 导入实体模型类; * 注册实体及其模型渲染器 * 创建实体注册键静态常量; * 编写实体类; * 注册实体; * 编写实体模型渲染器类; * 注册实体属性 * 定义实体属性; * 完成创建实体的其他工作; 为实

By Ne0inhk
Java 大视界 -- Java 大数据机器学习模型在电商用户画像构建与精准营销中的应用

Java 大视界 -- Java 大数据机器学习模型在电商用户画像构建与精准营销中的应用

Java 大视界 -- Java 大数据机器学习模型在电商用户画像构建与精准营销中的应用 * 引言: * 正文: * 一、电商用户画像构建的底层逻辑与数据基石 * 1.1 用户画像的四维数据体系 * 1.2 数据采集与预处理架构设计 * 二、Java 驱动的机器学习模型构建用户画像核心能力 * 2.1 协同过滤算法的工程化实现 * 2.2 聚类算法实现用户分群 * 三、精准营销系统的工程实践与行业案例 * 3.1 京东 “京准通” 智能营销平台 * 3.2 阿里巴巴 “千人千面” 推荐系统 * 四、系统性能优化与工程落地细节 * 4.1 高并发场景下的性能调优策略 * 4.2 模型全生命周期管理体系 * 结束语: * 🗳️参与投票和联系我: 引言: 嘿,亲爱的 Java

By Ne0inhk