Stream 流终端操作
短路操作
distinct
接口定义:
Stream<T> distinct()
方法描述:在
distinct
接口定义中,返回一个去除重复元素的流。该方法是根据hashCode
和equals
方法来判断元素是否相等。因此,我们的类必须实现hashCode
和equals
方法。如果distinct
方法正在处理有序流,那么对于重复元素,将保留第一个元素。并且这种方式选择不同元素是稳定的。在无序流中,不同元素的选择是任意的。在有序流的并行流中,保持 distinct()操作的稳定性是非常昂贵的,它需要大量的缓冲区和额外的工作。如果我们不关心保持流的有序性,那么我们可以使用unordered()
方法来取消有序性,这样可以提高性能。
sorted
对元素进行排序,通过 Comparator
来指定排序规则。
接口定义:
Stream<T> sorted()
Stream<T> sorted(Comparator<? super T> comparator)
方法描述:
当使用
Stream<T> sorted()
时,返回一个按自然顺序排序的流。当使用
Stream<T> sorted(Comparator<? super T> comparator)
时,返回一个按指定规则排序的流。
skip
跳过指定数量的元素,返回一个扔掉了前 n 个元素的流。如果流中元素不足 n 个,则返回一个空流。与 limit(n)
互补。
接口定义:
Stream<T> skip(long n)
方法描述:在
skip
接口定义中,返回一个扔掉了前 n 个元素的流。
limit
截断流,使其元素不超过给定数量。
接口定义:
Stream<T> limit(long maxSize)
方法描述:在
limit
接口定义中,返回一个截断流,使其元素不超过给定数量。
非短路操作
max
返回流中所有元素的最大值。
接口定义:
Optional<T> max(Comparator<? super T> comparator)
方法描述:在
max
接口定义中,接收一个Comparator
函数式接口作为参数,用于比较元素的大小。
min
返回流中所有元素的最小值。
接口定义:
Optional<T> min(Comparator<? super T> comparator)
方法描述:在
min
接口定义中,接收一个Comparator
函数式接口作为参数,用于比较元素的大小。
count
返回流中元素的个数。
接口定义:
long count()
方法描述:在
count
接口定义中,返回流中元素的个数。
reduce
将流中元素反复结合起来,得到一个值。
接口定义:
T reduce(T identity, BinaryOperator<T> accumulator)
Optional<T> reduce(BinaryOperator<T> accumulator)
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)
方法描述:
当使用
Optional<T> reduce(BinaryOperator<T> accumulator)
时,通过累加器accumulator
对流中所有元素进行累积操作,返回一个 T 类型的 Optional 对象。当使用
T reduce(T identity, BinaryOperator<T> accumulator)
时,给定一个初始值identity
,通过累加器accumulator
对流中所有元素进行累积操作,返回一个 Stream 中元素类型相同的对象。当使用
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)
时,给定一个初始值 identity,通过累加器 accumulator 对流中所有元素进行累积操作,得到一个 identity 类型的结果,第三个参数用于使用并行流时,将多个结果合并。
forEach
遍历元素,对每个元素执行操作。在并发流中,forEach
无法保证元素的顺序。
接口定义:
void forEach(Consumer<? super T> action)
方法描述:在
forEach
接口定义中,接收一个Consumer
函数式接口作为参数,用于对流中的每个元素执行操作。
forEachOrdered
遍历元素,对每个元素执行操作。在并发流中,forEachOrdered
保证元素的顺序。
接口定义:
void forEachOrdered(Consumer<? super T> action)
方法描述:在
forEachOrdered
接口定义中,接收一个 Consumer 函数式接口作为参数,用于对流中的每个元素执行操作。
toArray
将流转换为数组。
接口定义:
Object[] toArray()
T[] toArray(IntFunction<A[]> generator)
方法描述:在
toArray
接口定义中,返回一个数组,可以通过toArray()
方法将流转换为数组。
collect
将流转换为其他形式。接收一个 Collector 接口的实现,用于给流中元素做汇总的方法。
接口定义:
<R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner)
<R, A> R collect(Collector<? super T, A, R> collector)
方法描述:
当使用
<R, A> R collect(Collector<? super T, A, R> collector)
时,接收一个 Collector 接口的实现,用于给流中元素做汇总的方法。当使用
<R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner)
时,需要给定一个初始值,通过累加器 accumulator 对流中所有元素进行累积操作,第三个参数用于使用并行流时,将多个结果合并。
最后更新于
这有帮助吗?