T
- 流中的元素类型S
- TransformableWrappedStream
的实现类类型public interface TransformableWrappedStream<T,S extends TransformableWrappedStream<T,S>> extends WrappedStream<T,S>
WrappedStream
的扩展,用于为实现类提供更多中间操作方法的增强接口,
该接口提供的方法,返回值类型都为Stream
。Stream.Builder<T>
NOT_FOUND_ELEMENT_INDEX
Modifier and Type | Method and Description |
---|---|
default S |
append(Iterable<? extends T> iterable)
将输入元素转为流,返回一个前半段为当前流,后半段为新流的新实例
|
default <F> EasyStream<T> |
distinct(Function<? super T,F> keyExtractor)
返回一个具有去重特征的流 非并行流(顺序流)下对于重复元素,保留遇到顺序中最先出现的元素,并行流情况下不能保证具体保留哪一个
这是一个有状态中间操作
|
default S |
dropWhile(Predicate<? super T> predicate)
删除流中与断言匹配的元素,当遇到第一个不匹配的元素时终止,返回由剩余不匹配的元素组成的流。
|
default <R> S |
filter(Function<? super T,? extends R> mapper,
R value)
过滤元素,返回与 指定操作结果 匹配 指定值 的元素组成的流
这是一个无状态中间操作
|
default S |
filterIdx(BiPredicate<? super T,Integer> predicate)
过滤元素,返回与指定断言匹配的元素组成的流,断言带下标
|
default <R> EasyStream<R> |
flat()
如果当前元素是集合,则会将集合中的元素解构出来
例如:
List<List<List<String>>> 解构成 List<String> |
default <R> EasyStream<R> |
flat(Function<? super T,? extends Iterable<? extends R>> mapper)
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作, 转换为迭代器元素,
最后返回所有迭代器的所有元素组成的流
这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:
EasyStream<Long> ids = EasyStream.of(users).flat(user -> FastStream.of(user.getId(), user.getParentId()));
|
default <R> EasyStream<R> |
flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流
这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:
EasyStream<Long> ids = EasyStream.of(users).flatMap(user -> FastStream.of(user.getId(), user.getParentId()));
|
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 |
flatTree(Function<T,List<T>> childrenGetter,
BiConsumer<T,List<T>> childrenSetter)
将树递归扁平化为集合,内置一个小递归
这是一个无状态中间操作
eg:
List<Student> students = EasyStream.of(studentTree)
.flatTree(Student::getChildren, Student::setChildren)
.toList();
|
default S |
log()
返回叠加调用
Console.log(Object) 打印出结果的流 |
default <R> EasyStream<R> |
map(Function<? super T,? extends R> mapper)
返回与指定函数将元素作为参数执行的结果组成的流
这是一个无状态中间操作
|
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 的 新元素组成的流这是一个无状态中间操作
// 等价于先调用map再调用nonNull
.nonNull().map(...).nonNull()...
|
default S |
nonNull()
过滤掉空元素
|
default S |
parallel(boolean parallel)
更改流的并行状态
|
default S |
peekIdx(BiConsumer<? super T,Integer> action)
返回与指定函数将元素作为参数执行后组成的流。
|
default S |
prepend(Iterable<? extends T> iterable)
将输入元素转为流,返回一个前半段为新流,后半段为当前流的新实例
|
default S |
push(T... obj)
与给定元素组成的流合并,成为新的流
|
default S |
reverse()
反转顺序
|
default S |
splice(int start,
int deleteCount,
T... items)
通过删除或替换现有元素或者原地添加新的元素来修改列表,并以列表形式返回被修改的内容。
|
default EasyStream<EasyStream<T>> |
split(int batchSize)
按指定长度切分为双层流
形如:[1,2,3,4,5] -> [[1,2], [3,4], [5,6]]
|
default EasyStream<List<T>> |
splitList(int batchSize)
按指定长度切分为元素为list的流
形如:[1,2,3,4,5] -> [[1,2], [3,4], [5,6]]
|
default S |
takeWhile(Predicate<? super T> predicate)
遍历流中与断言匹配的元素,当遇到第一个不匹配的元素时终止,返回由匹配的元素组成的流。
|
default <K> EntryStream<K,T> |
toEntries(Function<T,K> keyMapper)
将当前流转为键值对流
|
default <K,V> EntryStream<K,V> |
toEntries(Function<T,K> keyMapper,
Function<T,V> valueMapper)
将当前流转为键值对流
|
default S |
unshift(T... obj)
给定元素组成的流与当前流合并,成为新的流
|
default <U,R> EasyStream<R> |
zip(Iterable<U> other,
BiFunction<? super T,? super U,? extends R> zipper)
将 现有元素 与 给定迭代器中对应位置的元素 使用 zipper 转换为新的元素,并返回新元素组成的流
新流的数量为两个集合中较小的数量, 即, 只合并下标位置相同的部分 |
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
default <U,R> EasyStream<R> zip(Iterable<U> other, BiFunction<? super T,? super U,? extends R> zipper)
U
- 给定的迭代对象类型R
- 合并后的结果对象类型other
- 给定的迭代器zipper
- 两个元素的合并器default EasyStream<EasyStream<T>> split(int batchSize)
形如:[1,2,3,4,5] -> [[1,2], [3,4], [5,6]]
batchSize
- 指定长度, 正整数default EasyStream<List<T>> splitList(int batchSize)
形如:[1,2,3,4,5] -> [[1,2], [3,4], [5,6]]
batchSize
- 指定长度, 正整数default <K,V> EntryStream<K,V> toEntries(Function<T,K> keyMapper, Function<T,V> valueMapper)
K
- 键类型V
- 值类型keyMapper
- 键的映射方法valueMapper
- 值的映射方法EntryStream
实例default <K> EntryStream<K,T> toEntries(Function<T,K> keyMapper)
K
- 键类型keyMapper
- 键的映射方法EntryStream
实例default S reverse()
default S parallel(boolean parallel)
parallel
- 是否并行default S splice(int start, int deleteCount, T... items)
start
- 起始下标deleteCount
- 删除个数,正整数items
- 放入值default S takeWhile(Predicate<? super T> predicate)
遍历流中与断言匹配的元素,当遇到第一个不匹配的元素时终止,返回由匹配的元素组成的流。
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();
若非必要,不推荐在并行流中进行该操作。predicate
- 断言default S dropWhile(Predicate<? super T> predicate)
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();
若非必要,不推荐在并行流中进行该操作。predicate
- 断言default <F> EasyStream<T> distinct(Function<? super T,F> keyExtractor)
F
- 参数类型keyExtractor
- 去重依据default S peekIdx(BiConsumer<? super T,Integer> action)
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());
action
- 指定的函数default S log()
Console.log(Object)
打印出结果的流default S append(Iterable<? extends T> iterable)
iterable
- 集合EntryStream
实例default S prepend(Iterable<? extends T> iterable)
iterable
- 集合EntryStream
实例default S nonNull()
default S filterIdx(BiPredicate<? super T,Integer> predicate)
predicate
- 断言default <R> S filter(Function<? super T,? extends R> mapper, R value)
R
- 返回类型mapper
- 操作value
- 用来匹配的值default <R> EasyStream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
EasyStream<Long> ids = EasyStream.of(users).flatMap(user -> FastStream.of(user.getId(), user.getParentId()));
default <R> EasyStream<R> flatMapIdx(BiFunction<? super T,Integer,? extends Stream<? extends R>> mapper)
R
- 拆分后流的元素类型mapper
- 操作,返回流default <R> EasyStream<R> flat(Function<? super T,? extends Iterable<? extends R>> mapper)
EasyStream<Long> ids = EasyStream.of(users).flat(user -> FastStream.of(user.getId(), user.getParentId()));
R
- 拆分后流的元素类型mapper
- 操作,返回可迭代对象default <R> EasyStream<R> flatNonNull(Function<? super T,? extends Iterable<? extends R>> mapper)
null
元素执行mapper操作,转换为迭代器,
并过滤迭代器中为null
的元素, 返回所有迭代器的所有非空元素组成的流R
- 拆分后流的元素类型mapper
- 操作,返回流flat(Function)
,
nonNull()
default S flatTree(Function<T,List<T>> childrenGetter, BiConsumer<T,List<T>> childrenSetter)
List<Student> students = EasyStream.of(studentTree)
.flatTree(Student::getChildren, Student::setChildren)
.toList();
childrenGetter
- 获取子节点的lambda,可以写作 Student::getChildren
childrenSetter
- 设置子节点的lambda,可以写作 Student::setChildren
default <R> EasyStream<R> flat()
List<List<List<String>>> 解构成 List<String>
R
- 函数执行后返回的List里面的类型default <R> EasyStream<R> map(Function<? super T,? extends R> mapper)
default <R> EasyStream<R> mapNonNull(Function<? super T,? extends R> mapper)
null
的 新元素组成的流
// 等价于先调用map再调用nonNull
.nonNull().map(...).nonNull()...
R
- 函数执行后返回的类型mapper
- 指定的函数default <R> EasyStream<R> mapIdx(BiFunction<? super T,Integer,? extends R> mapper)
R
- 函数执行后返回的类型mapper
- 指定的函数default <R> EasyStream<R> mapMulti(BiConsumer<? super T,? super Consumer<R>> mapper)
R
- 拆分后流的元素类型mapper
- 操作,返回流Copyright © 2025. All rights reserved.