Java 8 Stream API 深入解析:函数式编程的利器

Java 8 Stream API 深入解析:函数式编程的利器

在 Java 8 引入的众多特性中,Stream API 是最具革命性的工具之一,它让我们可以以声明式的方式处理集合数据,显著提升了代码的可读性和表达力。本文将从基础概念、核心操作、实际示例到性能注意事项,带你全面掌握 Stream API。


一、什么是 Stream?

Java 中的 Stream 是对集合对象功能的增强,它并不存储数据,而是定义了对数据的操作流程,具有以下特点:

  • 声明式:避免冗长的 for 循环。
  • 可组合:通过链式调用组合多个操作。
  • 惰性求值:中间操作不会立即执行,只有终端操作才会触发流的遍历。
  • 可并行:轻松使用并行流提升性能。

二、Stream 的分类

  • 顺序流(Sequential Stream):默认创建方式,单线程。
  • 并行流(Parallel Stream):通过多线程并发执行,提高性能。
List<String> list = Arrays.asList("A", "B", "C");
list.stream();               // 顺序流
list.parallelStream();       // 并行流

三、Stream 的创建方式

1. 从集合创建

List<String> list = Arrays.asList("Java", "Python", "C++");
Stream<String> stream = list.stream();

2. 从数组创建

int[] nums = {
   
   1, 2, 3, 4};
IntStream intStream = Arrays.stream(nums);

3. 使用 Stream.of()

Stream<String> stream = Stream.of("a", "b", "c");

4. 使用无限流

Stream<Integer> infinite = Stream.iterate(0, n -> n + 2).limit(5); // [0, 2, 4, 6, 8]

四、Stream 的核心操作

Stream 操作分为两类:

  • 中间操作(Intermediate):返回新的 Stream,可继续链式调用。
  • 终端操作(Terminal):触发流的处理,返回结果或副作用。

1. 过滤(filter)

List<String> result = list.stream()
                          .filter(s -> s.length() > 3)
                          .collect(Collectors.toList());

2. 映射(map / flatMap)

List<Integer> lengths = list.stream()
                            .map(String::length)
                            .collect(Collectors.toList());
List<String> words = Arrays.asList("hello world", "java stream");
List<String> chars = words.stream()
                          .flatMap(s -> Arrays.stream(s.split(" ")))
                          .collect(Collectors.toList()); // ["hello", "world", "java", "stream"]

3. 去重(distinct)

Stream
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑听雨。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值