Interface WrappedStream<T,S extends WrappedStream<T,S>>
- Type Parameters:
T- 流中的元素类型S-WrappedStream的实现类类型
- All Superinterfaces:
AutoCloseable,BaseStream<T,,Stream<T>> Iterable<T>,Stream<T>
- All Known Subinterfaces:
TerminableWrappedStream<T,,S> TransformableWrappedStream<T,S>
- All Known Implementing Classes:
EasyStream,EnhancedWrappedStream,EntryStream
Stream实例的包装器,用于增强原始的Stream,提供一些额外的中间与终端操作。
默认提供两个可用实现:
EasyStream:针对单元素的通用增强流实现;EntryStream:针对键值对类型元素的增强流实现;
- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface java.util.stream.Stream
Stream.Builder<T> -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptiondefault boolean判断是否所有元素满足给定断言default boolean判断是否有任何一个元素满足给定断言default voidclose()关闭流default <R> Rcollect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) 对元素进行收集,并返回收集后的容器 这是一个终端操作default <R,A> R 对元素进行收集,并返回收集后的元素 这是一个终端操作default longcount()返回流元素个数default Sdistinct()返回一个具有去重特征的流 非并行流(顺序流)下对于重复元素,保留遇到顺序中最先出现的元素,并行流情况下不能保证具体保留哪一个 这是一个有状态中间操作default EasyStream<T> 转换为EasyStreamboolean比较实例是否相等default S过滤元素,返回与指定断言匹配的元素组成的流 这是一个无状态中间操作findAny()考虑性能,随便取一个,这里不是随机取一个,是随便取一个获取第一个元素default DoubleStreamflatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作default IntStreamflatMapToInt(Function<? super T, ? extends IntStream> mapper) 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作default LongStreamflatMapToLong(Function<? super T, ? extends LongStream> mapper) 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作default void对流里面的每一个元素执行一个操作 这是一个终端操作default voidforEachOrdered(Consumer<? super T> action) 对流里面的每一个元素按照顺序执行一个操作 这是一个终端操作inthashCode()获取当前实例的哈希值default boolean返回流的并行状态iterator()返回流的迭代器default Slimit(long maxSize) 返回截取后面一些元素的流 这是一个短路状态中间操作default DoubleStreammapToDouble(ToDoubleFunction<? super T> mapper) 和EasyStream.map(Function)一样,只不过函数的返回值必须为double类型 这是一个无状态中间操作default IntStreammapToInt(ToIntFunction<? super T> mapper) 和EasyStream.map(Function)一样,只不过函数的返回值必须为int类型 这是一个无状态中间操作default LongStreammapToLong(ToLongFunction<? super T> mapper) 和EasyStream.map(Function)一样,只不过函数的返回值必须为long类型 这是一个无状态中间操作max(Comparator<? super T> comparator) 获取最大值min(Comparator<? super T> comparator) 获取最小值default boolean判断是否没有元素满足给定断言default S在流关闭时执行操作default Sparallel()将流转换为并行default S返回与指定函数将元素作为参数执行后组成的流。 这是一个无状态中间操作reduce(BinaryOperator<T> accumulator) 对元素进行聚合,并返回聚合后用Optional包裹的值,相当于在for循环里写sum=sum+ints[i] 该操作相当于:default Treduce(T identity, BinaryOperator<T> accumulator) 对元素进行聚合,并返回聚合后的值,相当于在for循环里写sum=sum+ints[i] 这是一个终端操作 求和、最小值、最大值、平均值和转换成一个String字符串均为聚合操作 例如这里对int进行求和可以写成:default <U> Ureduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) 对元素进行聚合,并返回聚合后的值,并行流时聚合拿到的初始值不稳定 这是一个终端操作default S返回一个串行流,该方法可以将并行流转换为串行流default Sskip(long n) 返回丢弃前面n个元素后的剩余元素组成的流,如果当前元素个数小于n,则返回一个元素为空的流 这是一个有状态中间操作default Ssorted()返回一个元素按自然顺序排序的流 如果此流的元素不是Comparable,则在执行终端操作时可能会抛出java.lang.ClassCastException对于顺序流,排序是稳定的。 对于无序流,没有稳定性保证。 这是一个有状态中间操作default Ssorted(Comparator<? super T> comparator) 返回一个元素按指定的Comparator排序的流 如果此流的元素不是Comparable,则在执行终端操作时可能会抛出java.lang.ClassCastException对于顺序流,排序是稳定的。 对于无序流,没有稳定性保证。 这是一个有状态中间操作default Spliterator<T> 返回流的拆分器default Object[]toArray()返回一个包含此流元素的数组 这是一个终端操作default <A> A[]toArray(IntFunction<A[]> generator) 返回一个包含此流元素的指定的数组,例如以下代码编译正常,但运行时会抛出ArrayStoreExceptiontoString()将当前实例转为字符串default S返回一个无序流(无手动排序)unwrap()获取被当前实例包装的流对象将一个原始流包装为指定类型的增强流 若source于当前实例包装的流并不相同,则该增强流与当前实例无关联关系Methods inherited from interface java.util.stream.Stream
dropWhile, flatMap, map, mapMulti, mapMultiToDouble, mapMultiToInt, mapMultiToLong, takeWhile, toList
-
Field Details
-
NOT_FOUND_ELEMENT_INDEX
static final int NOT_FOUND_ELEMENT_INDEX代表不存在的下标, 或者未找到元素时的下标- See Also:
-
-
Method Details
-
unwrap
获取被当前实例包装的流对象- Returns:
- 被当前实例包装的流对象
-
wrap
将一个原始流包装为指定类型的增强流 若source于当前实例包装的流并不相同,则该增强流与当前实例无关联关系- Parameters:
source- 被包装的流- Returns:
- 包装后的流
-
filter
过滤元素,返回与指定断言匹配的元素组成的流 这是一个无状态中间操作 -
mapToInt
和EasyStream.map(Function)一样,只不过函数的返回值必须为int类型 这是一个无状态中间操作 -
mapToLong
和EasyStream.map(Function)一样,只不过函数的返回值必须为long类型 这是一个无状态中间操作 -
mapToDouble
和EasyStream.map(Function)一样,只不过函数的返回值必须为double类型 这是一个无状态中间操作- Specified by:
mapToDoublein interfaceStream<T>- Parameters:
mapper- 返回值为double类型的函数- Returns:
- 叠加操作后元素类型全为double的流
-
flatMapToInt
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作- Specified by:
flatMapToIntin interfaceStream<T>- Parameters:
mapper- 操作,返回IntStream- Returns:
- 返回叠加拆分操作后的IntStream
-
flatMapToLong
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作- Specified by:
flatMapToLongin interfaceStream<T>- Parameters:
mapper- 操作,返回LongStream- Returns:
- 返回叠加拆分操作后的LongStream
-
flatMapToDouble
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作- Specified by:
flatMapToDoublein interfaceStream<T>- Parameters:
mapper- 操作,返回DoubleStream- Returns:
- 返回叠加拆分操作后的DoubleStream
-
distinct
返回一个具有去重特征的流 非并行流(顺序流)下对于重复元素,保留遇到顺序中最先出现的元素,并行流情况下不能保证具体保留哪一个 这是一个有状态中间操作 -
sorted
返回一个元素按自然顺序排序的流 如果此流的元素不是Comparable,则在执行终端操作时可能会抛出java.lang.ClassCastException对于顺序流,排序是稳定的。 对于无序流,没有稳定性保证。 这是一个有状态中间操作 -
sorted
返回一个元素按指定的Comparator排序的流 如果此流的元素不是Comparable,则在执行终端操作时可能会抛出java.lang.ClassCastException对于顺序流,排序是稳定的。 对于无序流,没有稳定性保证。 这是一个有状态中间操作 -
peek
返回与指定函数将元素作为参数执行后组成的流。 这是一个无状态中间操作.of("one", "two", "three", "four") .filter(e -> e.length() > 3) .peek(e -> System.out.println("Filtered value: " + e)) .map(String::toUpperCase) .peek(e -> System.out.println("Mapped value: " + e)) .collect(Collectors.toList()); -
limit
返回截取后面一些元素的流 这是一个短路状态中间操作 -
skip
返回丢弃前面n个元素后的剩余元素组成的流,如果当前元素个数小于n,则返回一个元素为空的流 这是一个有状态中间操作 -
forEach
对流里面的每一个元素执行一个操作 这是一个终端操作 -
forEachOrdered
对流里面的每一个元素按照顺序执行一个操作 这是一个终端操作- Specified by:
forEachOrderedin interfaceStream<T>- Parameters:
action- 操作
-
toArray
返回一个包含此流元素的数组 这是一个终端操作 -
toArray
返回一个包含此流元素的指定的数组,例如以下代码编译正常,但运行时会抛出ArrayStoreExceptionString[] strings = Stream.<Integer>builder().add(1).build().toArray(String[]::new);- Specified by:
toArrayin interfaceStream<T>- Type Parameters:
A- 给定的数组类型- Parameters:
generator- 这里的IntFunction的参数是元素的个数,返回值为数组类型- Returns:
- 包含此流元素的指定的数组
- Throws:
ArrayStoreException- 如果元素转换失败,例如不是该元素类型及其父类,则抛出该异常
-
reduce
对元素进行聚合,并返回聚合后的值,相当于在for循环里写sum=sum+ints[i] 这是一个终端操作 求和、最小值、最大值、平均值和转换成一个String字符串均为聚合操作 例如这里对int进行求和可以写成:Integer sum = integers.reduce(0, (a, b) -> a+b);或者写成:
Integer sum = integers.reduce(0, Integer::sum); -
reduce
对元素进行聚合,并返回聚合后用Optional包裹的值,相当于在for循环里写sum=sum+ints[i] 该操作相当于:
但它不局限于顺序执行,例如并行流等情况下 这是一个终端操作 例如以下场景抛出 NPE :boolean foundAny = false; T result = null; for (T element : this unwrap) { if (!foundAny) { foundAny = true; result = element; } else result = accumulator.apply(result, element); } return foundAny ? Optional.of(result) : Optional.empty();Optional<Integer> reduce = Stream.<Integer>builder().add(1).add(1).build().reduce((a, b) -> null);- Specified by:
reducein interfaceStream<T>- Parameters:
accumulator- 你想要的聚合操作- Returns:
- 聚合后用
Optional包裹的值 - Throws:
NullPointerException- 如果给定的聚合操作中执行后结果为空,并用于下一次执行,则抛出该异常- See Also:
-
reduce
对元素进行聚合,并返回聚合后的值,并行流时聚合拿到的初始值不稳定 这是一个终端操作 -
collect
default <R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) 对元素进行收集,并返回收集后的容器 这是一个终端操作- Specified by:
collectin interfaceStream<T>- Type Parameters:
R- 用于收集元素的容器,大多是集合- Parameters:
supplier- 提供初始值的函数式接口,一般可以传入构造参数accumulator- 具体收集操作combiner- 用于并行流时组合多个结果- Returns:
- 收集后的容器
List<Integer> collect = Stream.iterate(1, i -> ++i).limit(10).collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
-
collect
对元素进行收集,并返回收集后的元素 这是一个终端操作 -
min
获取最小值- Specified by:
minin interfaceStream<T>- Parameters:
comparator- 一个用来比较大小的比较器Comparator- Returns:
- 最小值
-
max
获取最大值- Specified by:
maxin interfaceStream<T>- Parameters:
comparator- 一个用来比较大小的比较器Comparator- Returns:
- 最大值
-
count
default long count()返回流元素个数 -
anyMatch
判断是否有任何一个元素满足给定断言 -
allMatch
判断是否所有元素满足给定断言 -
noneMatch
判断是否没有元素满足给定断言 -
findFirst
获取第一个元素 -
findAny
考虑性能,随便取一个,这里不是随机取一个,是随便取一个 -
iterator
返回流的迭代器- Specified by:
iteratorin interfaceBaseStream<T,S extends WrappedStream<T, S>> - Specified by:
iteratorin interfaceIterable<T>- Returns:
- 流的迭代器
-
spliterator
返回流的拆分器- Specified by:
spliteratorin interfaceBaseStream<T,S extends WrappedStream<T, S>> - Specified by:
spliteratorin interfaceIterable<T>- Returns:
- 流的拆分器
-
isParallel
default boolean isParallel()返回流的并行状态- Specified by:
isParallelin interfaceBaseStream<T,S extends WrappedStream<T, S>> - Returns:
- 流的并行状态
-
sequential
返回一个串行流,该方法可以将并行流转换为串行流- Specified by:
sequentialin interfaceBaseStream<T,S extends WrappedStream<T, S>> - Returns:
- 串行流
-
parallel
将流转换为并行- Specified by:
parallelin interfaceBaseStream<T,S extends WrappedStream<T, S>> - Returns:
- 并行流
-
unordered
返回一个无序流(无手动排序)标记一个流是不在意元素顺序的, 在并行流的某些情况下可以提高性能
- Specified by:
unorderedin interfaceBaseStream<T,S extends WrappedStream<T, S>> - Returns:
- 无序流
-
onClose
在流关闭时执行操作- Specified by:
onClosein interfaceBaseStream<T,S extends WrappedStream<T, S>> - Parameters:
closeHandler- 在流关闭时执行的操作- Returns:
- 流
-
close
default void close()关闭流- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceBaseStream<T,S extends WrappedStream<T, S>> - See Also:
-
hashCode
int hashCode()获取当前实例的哈希值 -
equals
比较实例是否相等 -
toString
String toString()将当前实例转为字符串 -
easyStream
转换为EasyStream- Returns:
- 转换后的EasyStream
-