Java Stream流:这篇就够了!详细教程

Java 8 引入了 Stream API,使得处理集合数据变得更加简洁和高效。Stream 提供了一种对集合进行聚合操作的高效方式,支持顺序和并行操作。本文将详细介绍 Java Stream 流的基本概念、常用操作以及使用示例,帮助你快速上手。

一、Stream 的基本概念

Stream 是对数据源(如集合、数组等)进行聚合操作的工具。Stream 不存储数据,而是从数据源中按需获取数据。与集合不同,Stream 主要关注的是计算而不是存储,因此通过流的操作不会改变原有的数据结构。

Stream 可以通过以下方式创建:

  1. 从集合创建:List<String> list = Arrays.asList("a", "b", "c"); Stream<String> stream = list.stream();
  2. 从数组创建:Stream<Integer> stream = Arrays.stream(new Integer[]{1, 2, 3});
  3. 使用静态方法:Stream<String> stream = Stream.of("a", "b", "c");

二、Stream 常用操作

Stream 提供了多种操作方法,常见的有:

  1. 中间操作(Intermediate Operations):返回一个新的 Stream,并且可以链式调用。中间操作是惰性求值,只有在终止操作被调用时才会执行。
  2. filter(Predicate<T> predicate):过滤符合条件的元素。
  3. map(Function<T, R> mapper):将元素转换为另一种形式。
  4. sorted():对流进行排序。

  5. 终止操作(Terminal Operations):产生结果或者副作用,并结束流的处理。

  6. collect(Collector<T, ?, R> collector):将流中的元素收集到集合。
  7. forEach(Consumer<T> action):对每个元素执行操作。
  8. reduce():对流中的元素进行聚合操作。

三、代码示例

下面的代码示例演示了如何使用 Stream API 进行常见的集合操作。

import java.util.*;
import java.util.stream.*;

public class StreamExample {
    public static void main(String[] args) {
        // 创建一个数字列表
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 1. 过滤出偶数并打印
        System.out.println("偶数:");
        numbers.stream()
               .filter(n -> n % 2 == 0)
               .forEach(System.out::println);

        // 2. 对每个数字进行平方运算并收集到一个新列表中
        List<Integer> squares = numbers.stream()
                                        .map(n -> n * n)
                                        .collect(Collectors.toList());
        System.out.println("平方数列表:" + squares);

        // 3. 计算偶数的总和
        int sumOfEvens = numbers.stream()
                                 .filter(n -> n % 2 == 0)
                                 .reduce(0, Integer::sum);
        System.out.println("偶数的总和:" + sumOfEvens);

        // 4. 排序并输出
        System.out.println("排序后的列表:");
        numbers.stream()
               .sorted()
               .forEach(System.out::println);
    }
}

代码解析

  1. 使用 filter() 方法从数字列表中提取偶数,并使用 forEach() 打印出来。
  2. 使用 map() 对每个数字进行平方运算,结果通过 collect() 方法收集到一个新的列表中。
  3. 使用 reduce() 计算偶数的总和。
  4. 最后,使用 sorted() 方法对原始列表进行排序并打印。

四、总结

Java Stream 流极大地方便了集合数据的处理,提供了一种声明式编程的风格,使代码更简洁。通过中间操作和终止操作的组合,开发者可以轻松实现复杂的数据处理逻辑。理解 Stream API 的基本概念和常用操作,将为你的 Java 编程增添不少便利。希望本文能帮助你快速掌握 Java Stream 流的使用!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部