Interface TransformableWrappedStream<T,S extends TransformableWrappedStream<T,S>>
- Type Parameters:
T- 流中的元素类型S-TransformableWrappedStream的实现类类型
- All Superinterfaces:
AutoCloseable,BaseStream<T,,Stream<T>> Iterable<T>,Stream<T>,WrappedStream<T,S>
- All Known Implementing Classes:
EasyStream,EnhancedWrappedStream,EntryStream
public interface TransformableWrappedStream<T,S extends TransformableWrappedStream<T,S>>
extends WrappedStream<T,S>
WrappedStream的扩展,用于为实现类提供更多中间操作方法的增强接口, 该接口提供的方法,返回值类型都为Stream。- Since:
- Java 17+
- Author:
- Kimi Liu
-
Nested Class Summary
Nested classes/interfaces inherited from interface java.util.stream.Stream
Stream.Builder<T> -
Field Summary
Fields inherited from interface org.miaixz.bus.core.center.stream.WrappedStream
NOT_FOUND_ELEMENT_INDEX -
Method Summary
Modifier and TypeMethodDescriptiondefault S将输入元素转为流,返回一个前半段为当前流,后半段为新流的新实例default <F> EasyStream<T> 返回一个具有去重特征的流 非并行流(顺序流)下对于重复元素,保留遇到顺序中最先出现的元素,并行流情况下不能保证具体保留哪一个 这是一个有状态中间操作default S删除流中与断言匹配的元素,当遇到第一个不匹配的元素时终止,返回由剩余不匹配的元素组成的流。 eg:default <R> S过滤元素,返回与 指定操作结果 匹配 指定值 的元素组成的流 这是一个无状态中间操作default SfilterIdx(BiPredicate<? super T, Integer> predicate) 过滤元素,返回与指定断言匹配的元素组成的流,断言带下标default <R> EasyStream<R> flat()如果当前元素是集合,则会将集合中的元素解构出来 例如:List<List<List<String>>> 解构成 List<String>default <R> EasyStream<R> 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作, 转换为迭代器元素, 最后返回所有迭代器的所有元素组成的流 这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:default <R> EasyStream<R> 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:default <R> EasyStream<R> flatMapIdx(BiFunction<? super T, Integer, ? extends Stream<? extends R>> mapper) 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流,操作带下标default <R> EasyStream<R> flatNonNull(Function<? super T, ? extends Iterable<? extends R>> mapper) 扩散流操作,可能影响流元素个数,对过滤后的非null元素执行mapper操作,转换为迭代器, 并过滤迭代器中为null的元素, 返回所有迭代器的所有非空元素组成的流 这是一个无状态中间操作default S将树递归扁平化为集合,内置一个小递归 这是一个无状态中间操作 eg:default Slog()返回叠加调用Console.log(Object)打印出结果的流default <R> EasyStream<R> 返回与指定函数将元素作为参数执行的结果组成的流 这是一个无状态中间操作default <R> EasyStream<R> mapIdx(BiFunction<? super T, Integer, ? extends R> mapper) 返回与指定函数将元素作为参数执行的结果组成的流,操作带下标default <R> EasyStream<R> mapMulti(BiConsumer<? super T, ? super Consumer<R>> mapper) 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流,操作带一个方法,调用该方法可增加元素 这是一个无状态中间操作default <R> EasyStream<R> mapNonNull(Function<? super T, ? extends R> mapper) 返回 元素 转换后 并且不为null的 新元素组成的流 这是一个无状态中间操作default SnonNull()过滤掉空元素default Sparallel(boolean parallel) 更改流的并行状态default SpeekIdx(BiConsumer<? super T, Integer> action) 返回与指定函数将元素作为参数执行后组成的流。操作带下标default S将输入元素转为流,返回一个前半段为新流,后半段为当前流的新实例default S与给定元素组成的流合并,成为新的流default Sreverse()反转顺序default S通过删除或替换现有元素或者原地添加新的元素来修改列表,并以列表形式返回被修改的内容。此方法不会改变原列表。 类似js的splice函数default EasyStream<EasyStream<T>> split(int batchSize) 按指定长度切分为双层流default EasyStream<List<T>> splitList(int batchSize) 按指定长度切分为元素为list的流default S遍历流中与断言匹配的元素,当遇到第一个不匹配的元素时终止,返回由匹配的元素组成的流。 eg:default <K> EntryStream<K, T> 将当前流转为键值对流default <K,V> EntryStream <K, V> 将当前流转为键值对流default S给定元素组成的流与当前流合并,成为新的流default <U,R> EasyStream <R> zip(Iterable<U> other, BiFunction<? super T, ? super U, ? extends R> zipper) 将 现有元素 与 给定迭代器中对应位置的元素 使用 zipper 转换为新的元素,并返回新元素组成的流 新流的数量为两个集合中较小的数量, 即, 只合并下标位置相同的部分Methods inherited from interface java.util.stream.Stream
mapMultiToDouble, mapMultiToInt, mapMultiToLong, toListMethods inherited from interface org.miaixz.bus.core.center.stream.WrappedStream
allMatch, anyMatch, close, collect, collect, count, distinct, easyStream, equals, filter, findAny, findFirst, flatMapToDouble, flatMapToInt, flatMapToLong, forEach, forEachOrdered, hashCode, isParallel, iterator, limit, mapToDouble, mapToInt, mapToLong, max, min, noneMatch, onClose, parallel, peek, reduce, reduce, reduce, sequential, skip, sorted, sorted, spliterator, toArray, toArray, toString, unordered, unwrap, wrap
-
Method Details
-
zip
default <U,R> EasyStream<R> zip(Iterable<U> other, BiFunction<? super T, ? super U, ? extends R> zipper) 将 现有元素 与 给定迭代器中对应位置的元素 使用 zipper 转换为新的元素,并返回新元素组成的流 新流的数量为两个集合中较小的数量, 即, 只合并下标位置相同的部分- Type Parameters:
U- 给定的迭代对象类型R- 合并后的结果对象类型- Parameters:
other- 给定的迭代器zipper- 两个元素的合并器- Returns:
- 合并后的结果对象的流
-
split
按指定长度切分为双层流形如:[1,2,3,4,5] -> [[1,2], [3,4], [5,6]]
- Parameters:
batchSize- 指定长度, 正整数- Returns:
- 切好的流
-
splitList
按指定长度切分为元素为list的流形如:[1,2,3,4,5] -> [[1,2], [3,4], [5,6]]
- Parameters:
batchSize- 指定长度, 正整数- Returns:
- 切好的流
-
toEntries
将当前流转为键值对流- Type Parameters:
K- 键类型V- 值类型- Parameters:
keyMapper- 键的映射方法valueMapper- 值的映射方法- Returns:
EntryStream实例
-
toEntries
将当前流转为键值对流- Type Parameters:
K- 键类型- Parameters:
keyMapper- 键的映射方法- Returns:
EntryStream实例
-
reverse
反转顺序- Returns:
- 反转元素顺序
-
parallel
更改流的并行状态- Parameters:
parallel- 是否并行- Returns:
- 流
-
splice
通过删除或替换现有元素或者原地添加新的元素来修改列表,并以列表形式返回被修改的内容。此方法不会改变原列表。 类似js的splice函数- Parameters:
start- 起始下标deleteCount- 删除个数,正整数items- 放入值- Returns:
- 操作后的流
-
takeWhile
遍历流中与断言匹配的元素,当遇到第一个不匹配的元素时终止,返回由匹配的元素组成的流。 eg:
EasyStream.of(1, 2, 3, 4, 5).takeWhile(i -> Objects.equals(3, i)) // 获取元素,一直到遇到第一个3为止 .toList(); // = [1, 2]与
JDK9中的takeWhile方法不太一样,此操作为顺序且有状态的中间操作。 即使在并行流中,该操作仍然是顺序执行的,并且不影响后续的并行操作:
若非必要,不推荐在并行流中进行该操作。EasyStream.iterate(1, i -> i + 1).parallel().takeWhile(e -> e < 50) // 顺序执行 .map(e -> e + 1) // 并发 .map(String::valueOf) // 并发 .toList(); -
dropWhile
删除流中与断言匹配的元素,当遇到第一个不匹配的元素时终止,返回由剩余不匹配的元素组成的流。 eg:EasyStream.of(1, 2, 3, 4, 5).dropWhile(i -> !Objects.equals(3, i)) // 删除不为3的元素,一直到遇到第一个3为止 .toList(); // = [3, 4, 5]与
JDK9中的dropWhile方法不太一样,此操作为顺序且有状态的中间操作。 即使在并行流中,该操作仍然是顺序执行的,并且不影响后续的并行操作:
若非必要,不推荐在并行流中进行该操作。EasyStream.iterate(1, i -> i + 1).parallel().dropWhile(e -> e < 50) // 顺序执行 .map(e -> e + 1) // 并发 .map(String::valueOf) // 并发 .toList(); -
distinct
返回一个具有去重特征的流 非并行流(顺序流)下对于重复元素,保留遇到顺序中最先出现的元素,并行流情况下不能保证具体保留哪一个 这是一个有状态中间操作- Type Parameters:
F- 参数类型- Parameters:
keyExtractor- 去重依据- Returns:
- 一个具有去重特征的流
-
peekIdx
返回与指定函数将元素作为参数执行后组成的流。操作带下标Stream.of("one", "two", "three", "four").filter(e -> e.length() > 3) .peekIdx((e, i) -> System.out.println("Filtered value: " + e + " Filtered idx:" + i)) .map(String::toUpperCase) .peekIdx((e, i) -> System.out.println("Mapped value: " + e + " Mapped idx:" + i)) .collect(Collectors.toList());- Parameters:
action- 指定的函数- Returns:
- 返回叠加操作后的FastStream当你需要查看经过操作管道某处的元素和下标,可以执行以下操作:
-
log
返回叠加调用Console.log(Object)打印出结果的流- Returns:
- 返回叠加操作后的FastStream
-
push
与给定元素组成的流合并,成为新的流- Parameters:
obj- 元素- Returns:
- 流
-
unshift
给定元素组成的流与当前流合并,成为新的流- Parameters:
obj- 元素- Returns:
- 流
-
append
将输入元素转为流,返回一个前半段为当前流,后半段为新流的新实例- Parameters:
iterable- 集合- Returns:
EntryStream实例
-
prepend
将输入元素转为流,返回一个前半段为新流,后半段为当前流的新实例- Parameters:
iterable- 集合- Returns:
EntryStream实例
-
nonNull
过滤掉空元素- Returns:
- 过滤后的流
-
filterIdx
过滤元素,返回与指定断言匹配的元素组成的流,断言带下标- Parameters:
predicate- 断言- Returns:
- 返回叠加过滤操作后的流
-
filter
过滤元素,返回与 指定操作结果 匹配 指定值 的元素组成的流 这是一个无状态中间操作- Type Parameters:
R- 返回类型- Parameters:
mapper- 操作value- 用来匹配的值- Returns:
- 与 指定操作结果 匹配 指定值 的元素组成的流
-
flatMap
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:EasyStream<Long> ids = EasyStream.of(users).flatMap(user -> FastStream.of(user.getId(), user.getParentId())); -
flatMapIdx
default <R> EasyStream<R> flatMapIdx(BiFunction<? super T, Integer, ? extends Stream<? extends R>> mapper) 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流,操作带下标- Type Parameters:
R- 拆分后流的元素类型- Parameters:
mapper- 操作,返回流- Returns:
- 返回叠加拆分操作后的流
-
flat
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作, 转换为迭代器元素, 最后返回所有迭代器的所有元素组成的流 这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:EasyStream<Long> ids = EasyStream.of(users).flat(user -> FastStream.of(user.getId(), user.getParentId()));- Type Parameters:
R- 拆分后流的元素类型- Parameters:
mapper- 操作,返回可迭代对象- Returns:
- 返回叠加拆分操作后的流
-
flatNonNull
扩散流操作,可能影响流元素个数,对过滤后的非null元素执行mapper操作,转换为迭代器, 并过滤迭代器中为null的元素, 返回所有迭代器的所有非空元素组成的流 这是一个无状态中间操作- Type Parameters:
R- 拆分后流的元素类型- Parameters:
mapper- 操作,返回流- Returns:
- 返回叠加拆分操作后的流
- See Also:
-
flatTree
将树递归扁平化为集合,内置一个小递归 这是一个无状态中间操作 eg:List<Student> students = EasyStream.of(studentTree).flatTree(Student::getChildren, Student::setChildren) .toList();- Parameters:
childrenGetter- 获取子节点的lambda,可以写作Student::getChildrenchildrenSetter- 设置子节点的lambda,可以写作Student::setChildren- Returns:
- EasyStream 一个流
-
flat
如果当前元素是集合,则会将集合中的元素解构出来 例如:List<List<List<String>>> 解构成 List<String>- Type Parameters:
R- 函数执行后返回的List里面的类型- Returns:
- EasyStream 一个流
-
map
返回与指定函数将元素作为参数执行的结果组成的流 这是一个无状态中间操作 -
mapNonNull
返回 元素 转换后 并且不为null的 新元素组成的流 这是一个无状态中间操作// 等价于先调用map再调用nonNull .nonNull().map(...).nonNull()...- Type Parameters:
R- 函数执行后返回的类型- Parameters:
mapper- 指定的函数- Returns:
- 新元素组成的流
-
mapIdx
返回与指定函数将元素作为参数执行的结果组成的流,操作带下标- Type Parameters:
R- 函数执行后返回的类型- Parameters:
mapper- 指定的函数- Returns:
- 返回叠加操作后的流
-
mapMulti
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流,操作带一个方法,调用该方法可增加元素 这是一个无状态中间操作
-