Java Stream 类型转换
引言
Java 8 引入了 Stream API,提供了一种新的编程模式来处理集合数据。Stream 具有很多强大的操作方法,可以用来过滤、映射、排序等操作数据。在实际应用中,我们经常需要对 Stream 中的数据进行类型转换。本文将介绍 Java Stream 中的类型转换操作,以及如何使用它们。
什么是类型转换?
类型转换是指将一种数据类型转换为另一种数据类型的过程。在 Java 中,我们可以使用强制类型转换(cast)或者使用一些内置方法来实现类型转换。Java Stream 中的类型转换操作也是类似的,它允许我们将一个 Stream 转换为另一个 Stream,或者将 Stream 中的元素类型进行转换。
Stream 类型转换方法
Java Stream API 提供了多个方法来进行类型转换,这些方法分别对应了不同的需求场景。下面是一些常用的类型转换方法:
-
map()
:将 Stream 中的元素进行映射转换。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = numbers.stream(); Stream<String> stringStream = stream.map(Object::toString);
在上面的示例中,我们将一个 Integer 类型的 Stream 转换为了一个 String 类型的 Stream。
-
flatMap()
:将 Stream 中的元素进行扁平化转换。List<List<String>> names = Arrays.asList( Arrays.asList("Alice", "Bob", "Charlie"), Arrays.asList("David", "Eve", "Frank") ); Stream<List<String>> stream = names.stream(); Stream<String> stringStream = stream.flatMap(Collection::stream);
在上面的示例中,我们将一个包含多个 List 的 Stream 转换为一个包含所有元素的 Stream。
-
filter()
:根据指定条件过滤 Stream 中的元素。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = numbers.stream(); Stream<Integer> filteredStream = stream.filter(number -> number % 2 == 0);
在上面的示例中,我们只保留了偶数元素,过滤掉了奇数元素。
-
distinct()
:去除 Stream 中的重复元素。List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 4, 5); Stream<Integer> stream = numbers.stream(); Stream<Integer> distinctStream = stream.distinct();
在上面的示例中,我们去除了重复的元素,只保留了不重复的元素。
-
sorted()
:对 Stream 中的元素进行排序。List<Integer> numbers = Arrays.asList(5, 4, 3, 2, 1); Stream<Integer> stream = numbers.stream(); Stream<Integer> sortedStream = stream.sorted();
在上面的示例中,我们对元素进行了升序排序。
-
limit()
:限制 Stream 中元素的数量。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = numbers.stream(); Stream<Integer> limitedStream = stream.limit(3);
在上面的示例中,我们只保留了前三个元素。
-
skip()
:跳过 Stream 中的指定数量的元素。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = numbers.stream(); Stream<Integer> skippedStream = stream.skip(2);
在上面的示例中,我们跳过了前两个元素。
-
toArray()
:将 Stream 转换为数组。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = numbers.stream(); Integer[] array = stream.toArray(Integer[]::new);
在上面的示例中,我们将 Stream 转换为了一个 Integer 数组。
类型转换示例
下面通过一个完整的示例来演示如何使用 Stream 进行类型转换: