Java 中如何使用 Stream API?

什么是 Stream API?

Stream API 是 Java 8 中引入的一项新特性,它提供了一种函数式的、流式处理集合数据的方式。Stream API 可以让我们以更简洁、更易读的方式处理集合数据,同时还可以充分利用多核 CPU 的并行处理能力,提高程序的执行效率。

在 Stream API 中,我们可以通过一系列的操作对集合数据进行处理,这些操作可以分为中间操作和终止操作。中间操作是对流的数据进行处理和转换,但不会产生最终的结果;终止操作是产生最终结果的操作,它会触发流的处理,并将结果返回。

Stream API 主要包含以下几个部分:

  • 流的创建:通过集合、数组、文件等方式创建流。
  • 操作流:对流进行过滤、映射、排序、去重等操作。
  • 终止流:将流转换为集合、数组、汇总统计、匹配检查等。

下面我们将详细介绍 Java 中如何使用 Stream API。

在这里插入图片描述

Java 中如何使用 Stream API?

流的创建

在 Java 中,我们可以通过多种方式创建流。以下是一些常用的流的创建方式:

从集合创建流

List<String> list = Arrays.asList("a", "b", "c", "d");
Stream<String> stream = list.stream();

从数组创建流

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

从文件创建流

Path path = Paths.get("file.txt");
Stream<String> stream = Files.lines(path);

从函数创建流

Stream.generate(() -> "hello")
      .limit(5)
      .forEach(System.out::println);

在上面的代码中,我们使用 Stream.generate() 方法创建了一个无限流,该流会不断生成字符串 “hello”,然后使用 limit() 方法对流进行截取,最终输出前 5 个元素。

操作流

在创建了流之后,我们可以对流进行一系列的操作,以实现数据的处理和转换。以下是一些常用的流操作:

filter() 方法

filter() 方法可以对流中的数据进行过滤,只保留符合条件的数据,从而得到一个新的流。

List<String> list = Arrays.asList("a", "b", "c", "d");
Stream<String> stream = list.stream().filter(s -> s.startsWith("a"));

上面的代码中,我们使用 filter() 方法过滤出以 “a” 开头的字符串,得到一个新的流。

map() 方法

map() 方法可以对流中的数据进行转换,从而得到一个新的流。

扫描二维码关注公众号,回复: 15741665 查看本文章
List<String> list = Arrays.asList("a", "b", "c", "d");
Stream<String> stream = list.stream().map(String::toUpperCase);

上面的代码中,我们使用 map() 方法将字符串转换成大写形式,得到一个新的流。

sorted() 方法

sorted() 方法可以对流中的数据进行排序,从而得到一个新的流。

List<String> list = Arrays.asList("b", "a", "d", "c");
Stream<String> stream = list.stream().sorted();

上面的代码中,我们使用 sorted() 方法对字符串进行排序,得到一个新的流。

distinct() 方法

distinct() 方法可以对流中的数据进行去重,从而得到一个新的流。

List<String> list = Arrays.asList("a", "b", "a", "c");
Stream<String> stream = list.stream().distinct();

上面的代码中,我们使用 distinct() 方法对字符串进行去重,得到一个新的流。

peek() 方法

peek() 方法可以对流中的数据进行操作,不会改变流中的数据,但可以在操作过程中输出一些信息。

List<String> list = Arrays.asList("a", "b", "c", "d");
Stream<String> stream = list.stream().peek(System.out::println);

上面的代码中,我们使用 peek() 方法对字符串进行操作,并输出字符串的值,但不会改变流中的数据。

终止流

在对流进行了操作之后,我们可以通过终止操作将流转换为最终的结果。以下是一些常用的终止操作:

collect() 方法

collect() 方法可以将流中的元素收集到一个集合中,如 List、Set、Map 等。

List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> result = list.stream().collect(Collectors.toList());

上面的代码中,我们使用 collect() 方法将流中的元素收集到一个 List 中。

reduce() 方法

reduce() 方法可以对流中的元素进行累加、求和等操作,得到一个最终的结果。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, Integer::sum);

上面的代码中,我们使用 reduce() 方法对整数进行求和操作,并得到最终的结果。

count() 方法

count() 方法可以统计流中的元素个数。

List<String> list = Arrays.asList("a", "b", "c", "d");
long count = list.stream().count();

上面的代码中,我们使用 count() 方法统计了流中的元素个数。

forEach() 方法

forEach() 方法可以对流中的每个元素进行操作,如输出到控制台等。

List<String> list = Arrays.asList("a", "b", "c", "d");
list.stream().forEach(System.out::println);

上面的代码中,我们使用 forEach() 方法输出了流中的每个元素。

完整示例代码

下面是一个完整的示例代码,演示了如何使用 Stream API 对集合中的数据进行操作。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamDemo {
    
    
    public static void main(String[] args) {
    
    
        List<String> list = Arrays.asList("hello", "world", "java", "stream", "api");

        // 过滤出长度大于 4 的字符串,并将其转换成大写形式
        List<String> result = list.stream()
                .filter(s -> s.length() > 4)
                .map(String::toUpperCase)
                .collect(Collectors.toList());
        System.out.println(result);

        // 统计字符串的个数
        long count = list.stream().count();
        System.out.println(count);

        // 对字符串进行排序,并输出到控制台
        list.stream().sorted().forEach(System.out::println);

        // 对字符串进行去重,并输出到控制台
        list.stream().distinct().forEach(System.out::println);

        // 对字符串进行操作,并输出到控制台
        list.stream().peek(System.out::println).collect(Collectors.toList());
    }
}

以上代码演示了如何使用 Stream API 对集合中的数据进行操作,并输出结果到控制台。

总结

Stream API 是 Java 8 中引入的一项新特性,它提供了一种函数式的、流式处理集合数据的方式。Stream API 可以让我们以更简洁、更易读的方式处理集合数据,同时还可以充分利用多核 CPU 的并行处理能力,提高程序的执行效率。在使用 Stream API 时,我们可以通过一系列的操作对集合数据进行处理,这些操作可以分为中间操作和终止操作。中间操作是对流的数据进行处理和转换,但不会产生最终的结果;终止操作是产生最终结果的操作,它会触发流的处理,并将结果返回。通过使用 Stream API,我们可以更方便地进行集合数据的处理和转换,提高程序的可读性和可维护性。

猜你喜欢

转载自blog.csdn.net/JasonXu94/article/details/131760286