返回
Stream 操作大集合,原来只有两大类
后端
2023-10-07 14:32:43
我们之前关于 Java 集合框架的文章中曾提到过 Stream 操作,本文将深入解析这些操作。Stream 提供的操作繁多,但归根结底只有两大类:
-
中间操作 :对 Stream 进行处理并返回新 Stream,不影响原始 Stream。如
filter()
、map()
、sorted()
。 -
终端操作 :从 Stream 中获取结果并关闭 Stream。如
forEach()
、collect()
、count()
。
让我们一一探讨这些操作:
1. 中间操作
filter(Predicate<? super T> predicate)
:根据谓词过滤 Stream 元素。map(Function<? super T, ? extends R> mapper)
:将每个元素映射到新值。sorted(Comparator<? super T> comparator)
:根据比较器对元素排序。distinct()
:去除重复元素。limit(long maxSize)
:限制 Stream 的大小。skip(long n)
:跳过前n
个元素。
2. 终端操作
forEach(Consumer<? super T> action)
:对每个元素执行操作。collect(Collector<? super T, A, R> collector)
:将元素收集到容器中。count()
:统计元素数量。min(Comparator<? super T> comparator)
:返回最小元素。max(Comparator<? super T> comparator)
:返回最大元素。reduce(BinaryOperator<T> accumulator)
:将元素归约为单个值。
实战案例
List<String> names = Arrays.asList("John", "Jane", "Bob", "Alice");
// 中间操作:过滤名称长度大于 3 的名称
Stream<String> filteredNames = names.stream()
.filter(name -> name.length() > 3);
// 终端操作:将过滤后的名称收集到新列表
List<String> longNames = filteredNames.collect(Collectors.toList());
通过了解 Stream 操作的这两大类,您可以轻松地理解和使用 Stream API 的强大功能。