您的位置:

Java Stream流操作实战

在Java 8 中,引入了Stream API,它是对集合(Collection)对象功能的增强和拓展,提供了在一些常见集合操作(如过滤、转换等)上更简洁、更高效的操作。Stream API 可以以声明式的方式来处理数据集合,而无需进行低级别的操作。在本文中,我们将探讨Java 8中的Stream API,并通过实际代码示例演示其使用方法。

Stream API 简介

Stream API 是 Java 8 中集合框架的新成员,它是一个非常强大的工具,可以用来对哪些元素的集合进行复杂、高效和灵活的操作。与传统的 Java 集合相比,Stream API 更加符合函数式编程思想,它提供了很多便捷的操作来处理集合元素,可以让我们使用更简洁、更流畅的方式处理数据。

Stream API 可以让我们避免使用大量的中间操作和循环来进行集合数据的计算,而是通过使用方法链来完成这些操作,一步步地对数据进行转换、过滤和操作。Stream API 也支持并行计算,可以利用多核处理器来提高处理速度。

Stream API 的使用

为了使用 Stream API,需要先将它应用于一个合法的数据源(如一个集合)。一旦我们把数据放到 Stream 中,就可以通过一系列操作来处理它,这些操作包括转换、过滤、排序和聚合等。通过方法链操作,Stream API 可以对数据进行按需处理,避免了不必要的计算。

以下是一个使用 Stream API 对数组中的元素进行求和的例子:

int[] numbers = {1, 2, 3, 4, 5};
int sum = Arrays.stream(numbers).sum();
System.out.println("Sum: " + sum);

在上面的代码中,我们使用了 Arrays 类中的 stream() 方法把数组转为 IntStream,然后使用 sum() 方法对其中的元素求和。

Stream API 的常见操作

1、过滤操作

过滤操作可以筛选出符合条件的数据,通过 filter() 方法实现。例如,我们可以使用 Stream API 筛选出大于 2 的数字:

List numbers = Arrays.asList(1, 2, 3, 4, 5);
List
    output = numbers.stream()
    .filter(n -> n > 2)
    .collect(Collectors.toList());
System.out.println(output); // [3, 4, 5]

   
  

在上面的代码中,我们使用 filter() 方法筛选掉小于等于 2 的元素,然后使用 collect() 方法将 filter() 方法的结果收集到一个新的列表中。

2、映射操作

映射操作可以把一个 Stream 转换为另一个 Stream,可以通过 map() 方法实现。例如,我们可以使用 Stream API 把一个字符串列表转换为字符串长度的列表:

List names = Arrays.asList("Java", "Python", "JavaScript");
List
    lengths = names.stream()
    .map(String::length)
    .collect(Collectors.toList());
System.out.println(lengths); // [4, 6, 10]

   
  

在上面的代码中,我们使用 map() 方法将列表中的字符串转换为其长度,然后使用 collect() 方法将 map() 方法的结果收集到一个新的列表中。

3、终止操作

终止操作会对数据进行一些最终的聚合和计算,例如计算数量、最大值、最小值、平均值等等。通过使用终止操作,可以把 Stream 中的元素转换为其他类型的值,例如一个 Java 基本类型值、一个对象或一个集合等。以下是一些常见的终止操作:

  • collect():将流中的元素收集到一个集合中。
  • reduce():对流中的元素进行归约操作。
  • min()、max():求流中的最小或最大元素。

4、并行流处理

Java 8 还引入了对流的并行处理,可以使用 parallelStream() 方法把一个流转为并行流,这样就可以利用 CPU 多核处理器的并行计算能力,加快处理速度。以下是一个简单的使用并行流求和的例子:

List numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
    .reduce(0, Integer::sum);
System.out.println("Sum: " + sum);

  

在上面的代码中,我们使用 parallelStream() 方法把 numbers 列表转为并行流,并使用 reduce() 方法对其中的元素求和。

总结

Java 8 中的 Stream API 是集合框架的一种强大的工具,能够以声明式的方式处理集合中的元素,让我们可以更加优雅地完成对数据的处理。在本文中,我们介绍了 Stream API 的操作和使用方法,并通过具体的代码示例演示了其用法。Stream API 提供了丰富的操作,可以大大简化我们的代码编写,提高数据处理的效率。