Java基础 - Stream 流:Stream API的中间操作

在上一篇博客中,我介绍了构建 Stream 流的多种方式,以及 Stream 流的特点和优势。如果你还没有阅读,你可以点击这里查看。

Java基础 - Stream 流:构建流的多种方式

在这篇博客中,我将探索 Stream API 的中间操作,它们可以让你对 Stream 流进行各种转换和过滤,从而得到你想要的结果。

Stream API 的中间操作是指那些返回一个新的 Stream 流对象的操作,它们不会消耗 Stream 流,也不会产生最终的结果,而是可以链式地调用,形成一个操作管道。Stream API 提供了很多中间操作,可以分为以下几类:

  • 筛选和切片:这类操作可以让你从 Stream 流中选择或者排除一些元素,例如 filter, distinct, limit, skip 等。
  • 映射:这类操作可以让你将 Stream 流中的每个元素转换为另一种类型或者形式,例如 map, flatMap, peek 等。
  • 排序:这类操作可以让你对 Stream 流中的元素进行排序,例如 sorted, reverseOrder 等。
  • 搜索:这类操作可以让你在 Stream 流中查找某些元素或者条件,例如 findAny, findFirst, anyMatch, allMatch, noneMatch 等。
  • 截断:这类操作可以让你在 Stream 流中截取某些元素或者条件,例如 takeWhile, dropWhile 等。

下面,我将用一些示例来展示这些中间操作的用法和效果。

1. 筛选和切片

1.1 filter

filter 操作可以让你根据一个谓词(Predicate)来筛选出 Stream 流中符合条件的元素,返回一个新的 Stream 流对象。例如:

// 创建一个 Stream 流对象
Stream<Integer> numberStream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 使用 filter 操作筛选出偶数
Stream<Integer> evenStream = numberStream.filter(n -> n % 2 == 0);

// 输出 [2, 4, 6, 8, 10]
evenStream.forEach(System.out::println);

1.2 distinct

distinct 操作可以让你去除 Stream 流中的重复元素,返回一个新的 Stream 流对象。例如:

// 创建一个 Stream 流对象
Stream<String> animalStream = Stream.of("cat", "dog", "cat", "elephant", "dog", "fox");

// 使用 distinct 操作去除重复元素
Stream<String> uniqueStream = animalStream.distinct();

// 输出 [cat, dog, elephant, fox]
uniqueStream.forEach(System.out::println);

1.3 limit

limit 操作可以让你限制 Stream 流中的元素个数,返回一个新的 Stream 流对象。例如:

// 创建一个 Stream 流对象
Stream<String> fruitStream = Stream.of("apple", "banana", "cherry", "durian", "elderberry", "fig");

// 使用 limit 操作限制元素个数为 3
Stream<String> limitedStream = fruitStream.limit(3);

// 输出 [apple, banana, cherry]
limitedStream.forEach(System.out::println);

1.4 skip

skip 操作可以让你跳过 Stream 流中的前 n 个元素,返回一个新的 Stream 流对象。例如:

// 创建一个 Stream 流对象
Stream<String> colorStream = Stream.of("red", "green", "blue", "yellow", "pink", "purple");

// 使用 skip 操作跳过前 2 个元素
Stream<String> skippedStream = colorStream.skip(2);

// 输出 [blue, yellow, pink, purple]
skippedStream.forEach(System.out::println);

2. 映射

2.1 map

map 操作可以让你将 Stream 流中的每个元素映射为另一种类型或者形式,返回一个新的 Stream 流对象。例如:

// 创建一个 Stream 流对象
Stream<String> nameStream = Stream.of("Alice", "Bob", "Charlie", "David");

// 使用 map 操作将每个元素转换为大写
Stream<String> upperStream =

你可能感兴趣的:(Java,java,开发语言)