• 探索 Java 8 中的 Stream 流:构建流的多种方式



    在这里插入图片描述

    🎉欢迎来到Java学习路线专栏~探索 Java 8 中的 Stream 流:构建流的多种方式



    Java 8 引入了 Stream API,这是一种强大的工具,用于处理集合数据。Stream 允许你以声明性的方式对数据进行操作,这意味着你可以轻松地执行过滤、映射、排序、聚合等操作,而无需编写复杂的迭代代码。本文将探讨 Java 8 中 Stream 流的多种构建方式,以帮助你更好地利用这一强大功能。
    在这里插入图片描述

    什么是 Stream 流?

    在深入探讨如何构建 Stream 流之前,让我们先理解 Stream 是什么以及它为什么如此重要。

    Stream 是 Java 8 引入的一种抽象的数据类型,它代表一个序列化的数据集合。Stream 不是一个数据结构,而是一种用于处理数据的工具,它允许你执行各种操作,例如过滤、映射、排序和聚合,以便提取所需的信息。Stream 的主要特点包括:

    • 声明性: 使用 Stream,你可以告诉程序你要做什么,而不是怎么做。这使得代码更容易阅读和维护。
    • 懒加载: Stream 操作不会立即执行,而是在需要的时候才进行计算。这可以提高性能,因为它避免了不必要的计算。
    • 可并行化: Stream 操作可以自动并行执行,充分利用多核处理器的性能。

    创建 Stream 流

    Java 8 提供了多种方式来创建 Stream 流,以下是其中一些常见的方式。

    在这里插入图片描述

    1. 从集合创建 Stream

    你可以使用集合类的 stream 方法或 parallelStream 方法来创建一个 Stream 流。这是使用 Stream 的最常见方式,因为你通常需要在已有的数据集合上执行操作。

    List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
    
    // 从 List 创建 Stream
    Stream<String> nameStream = names.stream();
    
    // 从 Set 创建并行 Stream
    Stream<String> parallelNameStream = new HashSet<>(names).parallelStream();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 从数组创建 Stream

    你可以使用 Arrays.stream 方法来从数组创建 Stream。

    int[] numbers = {1, 2, 3, 4, 5};
    
    // 从数组创建 IntStream
    IntStream numberStream = Arrays.stream(numbers);
    
    • 1
    • 2
    • 3
    • 4

    3. 使用 Stream.of 创建 Stream

    你可以使用 Stream.of 方法创建包含指定元素的 Stream。

    Stream<String> stream = Stream.of("Apple", "Banana", "Cherry");
    
    • 1

    4. 使用 Stream.generate 创建 Stream

    你可以使用 Stream.generate 方法创建一个无限流,通过传入一个 Supplier 函数来生成流中的元素。

    Stream<String> infiniteStream = Stream.generate(() -> "Hello, World!");
    
    • 1

    这将创建一个无限包含 “Hello, World!” 的 Stream。你可以使用 limit 方法来限制流的大小。

    Stream<String> limitedStream = Stream.generate(() -> "Hello, World!").limit(5);
    
    • 1

    5. 使用 Stream.iterate 创建 Stream

    你可以使用 Stream.iterate 方法创建一个包含迭代元素的 Stream。你需要提供一个初始元素和一个 UnaryOperator 函数,该函数定义了如何生成下一个元素。

    Stream<Integer> numbers = Stream.iterate(0, n -> n + 2);
    
    • 1

    这将创建一个包含偶数的无限流。同样,你可以使用 limit 方法来限制流的大小。

    Stream<Integer> limitedNumbers = Stream.iterate(0, n -> n + 2).limit(10);
    
    • 1

    Stream 流的操作

    一旦你创建了一个 Stream,你可以对其执行各种操作。以下是一些常见的操作:

    1. 过滤数据

    你可以使用 filter 方法来过滤流中的元素。例如,如果你有一个包含数字的流,你可以过滤出所有的偶数。

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    
    List<Integer
    
    > evenNumbers = numbers.stream()
        .filter(n -> n % 2 == 0)
        .collect(Collectors.toList());
    
    // 输出:[2, 4, 6, 8, 10]
    System.out.println(evenNumbers);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2. 映射数据

    你可以使用 map 方法来对流中的每个元素执行一个函数,并将结果收集到一个新的流中。

    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    
    List<Integer> nameLengths = names.stream()
        .map(String::length) // 映射为字符串长度
        .collect(Collectors.toList());
    
    // 输出:[5, 3, 7]
    System.out.println(nameLengths);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. 排序数据

    你可以使用 sorted 方法对流中的元素进行排序。

    List<String> fruits = Arrays.asList("Banana", "Apple", "Cherry");
    
    List<String> sortedFruits = fruits.stream()
        .sorted()
        .collect(Collectors.toList());
    
    // 输出:[Apple, Banana, Cherry]
    System.out.println(sortedFruits);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4. 聚合数据

    你可以使用各种聚合操作,如 reduceminmaxcount 等,来汇总流中的元素。

    List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5);
    
    int sum = numbers.stream()
        .reduce(0, Integer::sum);
    
    long count = numbers.stream()
        .count();
    
    // 输出:sum = 38, count = 11
    System.out.println("sum = " + sum + ", count = " + count);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    将多个流合并

    你可以使用 Stream.concat 方法将两个流合并为一个流。这在你需要合并多个数据源时非常有用。

    Stream<String> stream1 = Stream.of("A", "B", "C");
    Stream<String> stream2 = Stream.of("X", "Y", "Z");
    
    Stream<String> mergedStream = Stream.concat(stream1, stream2);
    
    // 输出:[A, B, C, X, Y, Z]
    System.out.println(mergedStream.collect(Collectors.toList()));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    结语

    Stream 是 Java 8 引入的一项强大的功能,使数据处理变得更加简单和高效。你可以使用多种方式来创建 Stream 流,并对其进行各种操作。这使得你能够以声明性的方式处理集合数据,而无需编写复杂的迭代代码。希望本文中的示例代码和解释有助于你更好地理解 Stream 的使用方法,以提高你的 Java 编程技能。 Stream 的学习曲线可能会有些陡峭,但一旦掌握,它将成为你处理数据的得力工具。


    🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
    📜您可能感兴趣的内容:

    在这里插入图片描述

  • 相关阅读:
    如何在 Ubuntu上使用 Nginx 设置密码验证
    《010.SpringBoot+vue之学生选课管理系统02》
    Python函数 - - reverse()和reversed()
    Redis整理
    Java错题归纳day21
    java-php-python-ssm计算机类专业考研交流学习平台计算机毕业设计
    flash转为html5工具
    后台基础权限框架搭建实现[木字楠博客]
    分布式计算浅谈
    复盘:Jetson AGX Xavier部署YOLOv5结合ROS小车实现对目标的检测跟踪
  • 原文地址:https://blog.csdn.net/qq_43546721/article/details/133921512