首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 8 Lambda / Stream 基本使用再练【超详细小白向教程】

Java 8 Lambda / Stream 基本使用再练【超详细小白向教程】

作者头像
默 语
发布2025-04-08 08:48:14
发布2025-04-08 08:48:14
42000
代码可运行
举报
文章被收录于专栏:JAVAJAVA
运行总次数:0
代码可运行

📝 摘要(Summary)

Java 8 引入了 Lambda 表达式与 Stream API,这不仅大幅减少了冗余代码,也让 Java 代码更简洁、函数式、更具表达力。对于刚接触 Java 8 的开发者来说,这两个新特性看起来有点“陌生”,但只要掌握核心语法和典型用法,就能迅速提升编码效率。

这篇文章是一次“再练”与复盘,也适合第一次接触 Java 8 的同学。从最基础的概念、语法规则、常见场景、到实战案例,我们都会一一展开。

Java 8 Lambda / Stream 基本使用再练【超详细小白向教程】

🌟 引言(Introduction)

在 Java 8 之前,Java 是一门“面向对象到极致”的语言。如果你想对一个集合执行一系列操作,比如筛选、排序、映射等,往往需要写很多 for 循环和匿名内部类,代码既冗长又不易维护。

Java 8 带来了两个“划时代”的工具:

  1. Lambda 表达式:把“函数”当作参数传递,让代码更简洁、可读。
  2. Stream 流式操作:基于集合的一种“流水线式”的处理方式。

这篇文章将手把手带你入门 Lambda 和 Stream,从“能看懂”到“能上手”,逐步进阶!

📚 正文(Main Content)

🔹 一、Lambda 表达式详解
1.1 什么是 Lambda?

Lambda 是一种匿名函数(没有名字的函数),其主要作用是将行为(代码)作为参数进行传递

它的基本语法如下:

代码语言:javascript
代码运行次数:0
运行
复制
(parameters) -> expression

或者

代码语言:javascript
代码运行次数:0
运行
复制
(parameters) -> { statements }
1.2 Lambda 表达式的简写语法

完整形式

简化形式

说明

(String s) -> System.out.println(s)

s -> System.out.println(s)

参数类型可推导,省略类型

(a, b) -> { return a + b; }

(a, b) -> a + b

单行返回可省略 return 和大括号

1.3 示例一:替代匿名内部类
代码语言:javascript
代码运行次数:0
运行
复制
// 传统方式
Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello from Runnable!");
    }
};

// Lambda 写法
Runnable r2 = () -> System.out.println("Hello from Lambda!");
1.4 示例二:Comparator 排序
代码语言:javascript
代码运行次数:0
运行
复制
List<String> list = Arrays.asList("banana", "apple", "pear");

// 传统方式
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }
});

// Lambda 简写
Collections.sort(list, (a, b) -> a.compareTo(b));
🔹 二、函数式接口(Functional Interface)
2.1 什么是函数式接口?

只包含一个抽象方法的接口,就叫做函数式接口。常见的如:

  • Runnable
  • Comparator
  • Callable
  • Function
  • Predicate
  • Consumer
2.2 如何自定义函数式接口?
代码语言:javascript
代码运行次数:0
运行
复制
@FunctionalInterface
public interface MyFunction {
    void execute();
}
🔹 三、Stream API 初体验
3.1 什么是 Stream?

Stream 是 Java 8 中用于处理集合的全新抽象概念。通过 声明式链式操作,可以实现集合的筛选、映射、排序、聚合等操作。

3.2 Stream 的三个核心操作阶段:
  1. 创建 Stream
  2. 中间操作
  3. 终结操作
🔹 四、Stream 使用详解
4.1 创建 Stream 的方式
代码语言:javascript
代码运行次数:0
运行
复制
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream1 = list.stream();             // 普通 stream
Stream<String> stream2 = list.parallelStream();     // 并行 stream
Stream<Integer> stream3 = Stream.of(1, 2, 3, 4);
Stream<Double> stream4 = Stream.generate(Math::random).limit(5);
4.2 常见中间操作

操作方法

说明

filter

过滤符合条件的元素

map

对每个元素进行转换

sorted

排序操作

distinct

去重

limit(n) / skip(n)

限制/跳过前n个元素

代码语言:javascript
代码运行次数:0
运行
复制
List<String> names = Arrays.asList("Tom", "Jerry", "Tim", "John");
List<String> filtered = names.stream()
    .filter(name -> name.startsWith("T"))
    .collect(Collectors.toList());
4.3 常见终结操作

操作方法

说明

forEach

遍历每个元素

collect

收集成集合

count

统计数量

reduce

规约成一个结果

代码语言:javascript
代码运行次数:0
运行
复制
List<String> upper = names.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());
🔹 五、实战:综合使用 Lambda + Stream
代码语言:javascript
代码运行次数:0
运行
复制
class User {
    String name;
    int age;
}

List<User> users = Arrays.asList(
    new User("Tom", 28),
    new User("Jerry", 22),
    new User("Lucy", 30)
);

List<String> result = users.stream()
    .filter(u -> u.getAge() > 25)
    .sorted(Comparator.comparing(User::getAge))
    .map(User::getName)
    .collect(Collectors.toList());

输出:

代码语言:javascript
代码运行次数:0
运行
复制
[Tom, Lucy]
🔹 六、Lambda + Stream 小技巧合集

需求

示例

求最大值

list.stream().max(Integer::compareTo).get()

去除 null 值

list.stream().filter(Objects::nonNull)

统计词频

stream.collect(Collectors.groupingBy(w -> w, Collectors.counting()))

转 Map

.collect(Collectors.toMap(User::getId, User::getName))

✅ 总结(Conclusion)

Lambda 更像是一种“写法革新”,消除了匿名内部类的冗余;Stream 则更像是“处理思想”的变化,引导我们用声明式、函数式的方式处理集合。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📝 摘要(Summary)
  • Java 8 Lambda / Stream 基本使用再练【超详细小白向教程】
    • 🌟 引言(Introduction)
    • 📚 正文(Main Content)
      • 🔹 一、Lambda 表达式详解
      • 🔹 二、函数式接口(Functional Interface)
      • 🔹 三、Stream API 初体验
      • 🔹 四、Stream 使用详解
      • 🔹 五、实战:综合使用 Lambda + Stream
      • 🔹 六、Lambda + Stream 小技巧合集
    • ✅ 总结(Conclusion)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档