Java 8 引入的 Stream API(Spl)极大地简化了集合操作,使得代码更简洁、易读且易于维护。Stream API 提供了一种声明式的方式来处理数据集合,允许你以函数式编程风格执行复杂的集合操作。
以下是如何利用 Stream API 简化集合操作的一些例子:
1. 创建 Stream
Stream 是从数据源(如集合、数组、输入流等)中抽象出来的元素序列。要创建一个 Stream,可以使用以下几种方法:
- 通过集合直接创建 Stream:
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
Stream<String> stream = list.stream();
- 通过数组创建 Stream:
String[] array = {"Apple", "Banana", "Cherry"};
Stream<String> stream = Arrays.stream(array);
- 使用生成器或迭代器创建 Stream:
Stream<Integer> stream = Stream.generate(() -> (int)(Math.random() * 100));
2. 中间操作
Stream API 提供了一系列中间操作,用于在数据流上执行一系列操作,这些操作不会改变原数据,而是返回一个新的 Stream:
filter:过滤元素,只保留满足条件的元素:
Stream<String> filteredStream = stream.filter(s -> s.startsWith("B"));
map:将元素映射到另一个形式,例如转换为小写:
Stream<String> mappedStream = stream.map(String::toLowerCase);
sorted:对元素进行排序:
Stream<String> sortedStream = stream.sorted();
3. 终止操作
终止操作会处理 Stream 的元素并返回一个结果或副作用:
forEach:遍历每个元素,并对其执行操作(无返回值):
stream.forEach(System.out::println);
collect:将 Stream 收集到集合、Map 或其他数据结构中:
List<String> collectedList = stream.collect(Collectors.toList());
reduce:对元素进行累积操作,返回一个单元素结果:
Optional<String> reduced = stream.reduce((s1, s2) -> s1 + s2);
4. 组合操作
你可以将中间操作和终止操作组合起来,实现复杂的链式操作:
List<String> collectedList = stream
.filter(s -> s.startsWith("B"))
.map(String::toLowerCase)
.sorted()
.collect(Collectors.toList());
5. Stream 特性
Stream API 还提供了以下特性:
并行处理:通过
parallelStream()方法,Stream API 可以利用多核处理器并行处理数据。延迟执行:Stream 操作是延迟执行的,这意味着操作只有在需要结果时才会执行。
内部迭代:Stream API 使用内部迭代,无需显式地管理迭代状态。
通过使用 Stream API,你可以编写更加简洁、易于理解和维护的代码。希望这些例子能帮助你更好地理解如何在 Java 中利用 Stream API 简化集合操作。
