stream
Java Stream API 是 Java 8 引入的一个强大的功能,用于处理数据流(如集合内容)的工具。Stream API 可以极大简化对集合的操作, 并且支持函数式编程风格。它提供了很多操作方法,可以分为中间操作(Intermediate operations)和终端操作(Terminal operations)两大类。
中间操作(Intermediate operations)
中间操作返回的是一个新的 Stream。这类操作是懒加载的,即它们不会立即执行,只有当终端操作被执行时才会触发整个流水线的执行。
filter(Predicate<T> predicate)
- 过滤出符合条件的元素。map(Function<T, R> mapper)
- 将每个元素转换成另一个元素。flatMap(Function<T, Stream<R>> mapper)
- 将每个元素转换为多个元素,然后将这些元素扁平化到一个流中。distinct()
- 去除重复的元素。limit(long maxSize)
- 获取指定数量的元素。skip(long n)
- 跳过前n个元素。sorted(Comparator<? super T> comparator)
- 按照特定的比较器排序元素。peek(Consumer<? super T> action)
- 对每个元素执行一个操作并返回新的 Stream。
终端操作(Terminal operations)
终端操作会从流的流水线中产生结果或副作用。一旦执行了终端操作,就不能再从原始流中提取更多的值。
forEach(Consumer<? super T> action)
- 对每个元素执行一个操作。toArray()
- 将流转换为数组。reduce(BinaryOperator<T> accumulator)
- 将流中的元素累积起来,产生一个结果。collect(Collector<? super T,A,R> collector)
- 使用 Collector 收集结果。min(Comparator<? super T> comparator)
- 返回最小元素。max(Comparator<? super T> comparator)
- 返回最大元素。anyMatch(Predicate<? super T> predicate)
- 如果至少有一个元素满足给定的条件,则返回 true。allMatch(Predicate<? super T> predicate)
- 如果所有元素都满足给定的条件,则返回 true。noneMatch(Predicate<? super T> predicate)
- 如果没有元素满足给定的条件,则返回 true。count()
- 返回流中元素的数量。findFirst()
- 返回第一个元素。findAny()
- 返回任意一个元素。
创建 Stream
创建 Stream 的方式有多种,包括但不限于:
- 从集合创建:
List<String> list = Arrays.asList("a", "b", "c"); Stream<String> stream = list.stream();
- 从数组创建:
String[] array = {"a", "b", "c"}; Stream<String> stream = Arrays.stream(array);
- 使用
Stream.of()
方法:Stream<String> stream = Stream.of("a", "b", "c");
- 使用
IntStream.range()
或IntStream.rangeClosed()
创建数值流。 - 通过文件读取创建 Stream,例如使用
Files.lines()
方法。
并行流 Parallel Streams
Stream API 还支持并行处理(parallel streams),这可以通过调用 stream.parallel()
或直接从集合调用 collection.parallelStream()
来实现。并行流可以利用多核处理器的优势来加速处理过程。
以上就是 Java Stream API 的一些主要用法。实际使用时,可以根据具体需求组合不同的操作来达到预期的效果。