自从 Java 8 在 2014 年问世以来,它为开发者带来了许多有趣的新特性,如 Lambda 表达式、接口默认方法等。其中,Stream API 是 Java 8 引入的一项重要特性,它带来了大量的新方法和 API 来简化数据处理的过程。在本文中,我们将详细介绍 Stream API 及其用法,并通过一些具体的 Java 示例代码来演示。
什么是 Stream?
Stream 是 Java 8 提供的一个新抽象,它允许您以声明性方式处理数据集合。与传统的 for 循环不同,Stream API 提供了一种更简洁、更易读的方式来处理数据。Stream API 可以用于对集合进行各种操作,如筛选、排序、映射等。
创建 Stream
要开始使用 Stream API,首先需要创建一个 Stream。常见的创建 Stream 的方法有以下几种:
-
从集合创建
-
从数组创建
-
使用 Stream.of 方法创建
-
使用 Stream.iterate 和 Stream.generate 方法创建
以下是一些创建 Stream 的示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
// 从集合创建
List<String> names = Arrays.asList("Alice", "Bob", "Cathy", "David");
Stream<String> nameStream = names.stream();
// 从数组创建
String[] namesArray = new String[]{"Alice", "Bob", "Cathy", "David"};
Stream<String> nameArrayStream = Arrays.stream(namesArray);
// 使用 Stream.of 方法创建
Stream<String> nameOfStream = Stream.of("Alice", "Bob", "Cathy", "David");
// 使用 Stream.iterate 和 Stream.generate 方法创建
Stream<Integer> iterateStream = Stream.iterate(0, n -> n + 1);
Stream<Double> generateStream = Stream.generate(Math::random);
}
}
常用 Stream 操作
Stream API 提供了许多用于数据处理的方法,以下是一些常用操作的示例:
-
filter:筛选出满足条件的元素
-
map:将元素转换为其他类型或形式
-
sorted:对元素进行排序
-
collect:收集 Stream 的结果到集合
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Cathy", "David");
// 筛选出长度大于3的字符串
List<String> filteredNames = names.stream()
.filter(name -> name.length() > 3)
.collect(Collectors.toList());
System.out.println(filteredNames); // [Alice, Cathy, David]
// 将字符串转换为大写
List<String> upperNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperNames); // [ALICE, BOB, CATHY, DAVID]
// 按字符串长度排序
List<String> sortedNames = names.stream()
.sorted(Comparator.comparingInt(String::length))
.collect(Collectors.toList());
System.out.println(sortedNames); // [Bob, Alice, Cathy, David]
}
}
此外,Stream API 还提供了一些其他有用的方法,如 forEach、toArray、reduce 等。以下是一些示例:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Cathy", "David");
// 使用 forEach 遍历 Stream
names.stream().forEach(System.out::println);
// 将 Stream 转换为数组
String[] namesArray = names.stream().toArray(String[]::new);
System.out.println(Arrays.toString(namesArray));
// 使用 reduce 操作计算字符串长度之和
Optional<Integer> totalLength = names.stream()
.map(String::length)
.reduce(Integer::sum);
totalLength.ifPresent(System.out::println); // 16
}
}
Stream API 是 Java 8 提供的一种新的数据处理方式,它为开发者提供了一系列简洁、易读的数据处理方法。通过本文的介绍和示例代码,我们了解了如何创建 Stream,以及如何使用常用的 Stream 操作。希望这些知识能帮助您更好地利用 Java 8 的新特性,提高开发效率。