Class EntryStream<K,V>
java.lang.Object
org.miaixz.bus.core.center.stream.EnhancedWrappedStream<Map.Entry<K,V>,EntryStream<K,V>>
org.miaixz.bus.core.center.stream.EntryStream<K,V>
- Type Parameters:
K- 键类型V- 值类型
- All Implemented Interfaces:
AutoCloseable,Iterable<Map.Entry<K,,V>> BaseStream<Map.Entry<K,,V>, Stream<Map.Entry<K, V>>> Stream<Map.Entry<K,,V>> TerminableWrappedStream<Map.Entry<K,,V>, EntryStream<K, V>> TransformableWrappedStream<Map.Entry<K,,V>, EntryStream<K, V>> WrappedStream<Map.Entry<K,V>, EntryStream<K, V>>
参考StreamEx的EntryStream与vavr的Map,是针对键值对对象
Map.Entry特化的单元素增强流实现。
本身可视为一个元素类型为Map.Entry的Stream,
用于支持流式处理Map集合中的、或其他键值对类型的数据。- 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 class org.miaixz.bus.core.center.stream.EnhancedWrappedStream
streamFields inherited from interface org.miaixz.bus.core.center.stream.WrappedStream
NOT_FOUND_ELEMENT_INDEX -
Method Summary
Modifier and TypeMethodDescriptionbooleanallMatch(BiPredicate<? super K, ? super V> predicate) 所有键值对是否都符合条件booleananyMatch(BiPredicate<? super K, ? super V> predicate) 是否存在任意符合条件的键值对将输入元素转为流,返回一个前半段为当前流,后半段为新流的新EasyStream实例<R> RcollectKeys(Collector<K, ?, R> collector) 收集键<R> RcollectValues(Collector<V, ?, R> collector) 收集值根据键去重,默认丢弃靠后的根据值去重,默认丢弃靠后的static <K,V> EntryStream <K, V> empty()创建一个空的串行流filter(BiPredicate<? super K, ? super V> filter) 根据键和值过滤键值对filterByKey(Predicate<? super K> filter) 根据键过滤键值对filterByValue(Predicate<? super V> filter) 根据值过滤键值对<R> EasyStream<R> 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:<N> EntryStream<N, V> flatMapKey(Function<? super K, Stream<? extends N>> keyMapper) 将原有流的键执行mapper操作映射为流,流中的所有所有元素仍然对应原本的值, 然后再返回由这些流中所有元素组成的流新EntryStream串行流。 效果类似:<N> EntryStream<K, N> flatMapValue(Function<? super V, Stream<? extends N>> valueMapper) 将原有流的值执行mapper操作映射为流,流中的所有所有元素仍然对应原本的键, 然后再返回由这些流中所有元素组成的流新EntryStream串行流。 效果类似:voidforEach(BiConsumer<K, V> consumer) 遍历键值对将键值对按键分组<C extends Collection<V>,M extends Map<K, C>>
MgroupByKey(Supplier<M> mapFactory, Collector<V, ?, C> collector) 将键值对按键分组<C extends Collection<V>>
Map<K, C> groupByKey(Collector<V, ?, C> collector) 将键值对按键分组inverse()将键值对翻转<N> EasyStream<N> map(BiFunction<? super K, ? super V, ? extends N> mapper) 将实例转为根据键值对生成的单对象Stream实例<R> EasyStream<R> 返回与指定函数将元素作为参数执行的结果组成的流 这是一个无状态中间操作<N> EntryStream<N, V> 将键映射为另一类型<N> EntryStream<K, N> 将值映射为另一类型static <K,V> EntryStream <K, V> 根据键与值的集合创建键值对流,若两集合在相同下标的位置找不到对应的键或值,则使用null填充。 比如:[1, 2, 3]与[1, 2]合并,则得到[{1=1}, {2=2}, {3=null}]。booleannoneMatch(BiPredicate<? super K, ? super V> predicate) 所有键值对是否都不符合条件过滤流中键值对本身,或键值对的键为null的元素过滤流中键值对本身、键值对中的值或键为null的元素过滤流中键值对本身,或键值对的值为null的元素static <K,V> EntryStream <K, V> static <T,K, V> EntryStream <K, V> of(Iterable<T> source, Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends V> valueMapper) 根据一个Collection集合中创建一个串行流static <K,V> EntryStream <K, V> 根据一个Map集合中的键值对创建一个串行流, 对流的操作不会影响到入参的map实例本身static <K,V> EntryStream <K, V> 包装一个已有的流,若入参为空则返回一个空的串行流。 若输入流中存在元素为null,则会映射为一个键值皆为null的键值对。检查键检查值将输入元素转为流,返回一个前半段为新流,后半段为当前流的新EasyStream实例向当前流末尾追加元素sortByKey(Comparator<? super K> comparator) 根据键排序sortByValue(Comparator<? super V> comparator) 根据值排序转为键的流toMap()转为HashMap集合转为Map集合转为Map集合toTable(BiFunction<? super K, ? super V, ? extends N> rowKeyMapper) toTable(BiFunction<? super K, ? super V, ? extends N> rowKeyMapper, Supplier<Map<K, V>> colMapFactory, BinaryOperator<V> operator) toTableByKey(Function<? super K, ? extends N> rowKeyMapper) toTableByKey(Function<? super K, ? extends N> rowKeyMapper, Supplier<Map<K, V>> colMapFactory, BinaryOperator<V> operator) toTableByValue(Function<? super V, ? extends N> rowKeyMapper) toTableByValue(Function<? super V, ? extends N> rowKeyMapper, Supplier<Map<K, V>> colMapFactory, BinaryOperator<V> operator) 转为值的流项当前流队首追加元素根据一个原始的流,返回一个新包装类实例Methods inherited from class org.miaixz.bus.core.center.stream.EnhancedWrappedStream
equals, exec, hashCode, toString, unwrapMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.stream.Stream
mapMultiToDouble, mapMultiToInt, mapMultiToLongMethods inherited from interface org.miaixz.bus.core.center.stream.TerminableWrappedStream
at, findFirst, findFirstIdx, findLast, findLast, findLastIdx, forEachIdx, forEachOrderedIdx, group, group, group, isEmpty, isNotEmpty, join, join, join, partition, partition, partition, toColl, toIdxMap, toIdxMap, toList, toMap, toMap, toMap, toMap, toSet, toUnmodifiableList, toUnmodifiableMap, toUnmodifiableMap, toUnmodifiableSet, toZipMethods inherited from interface org.miaixz.bus.core.center.stream.TransformableWrappedStream
distinct, dropWhile, filter, filterIdx, flat, flat, flatMapIdx, flatNonNull, flatTree, log, mapIdx, mapMulti, mapNonNull, nonNull, parallel, peekIdx, push, reverse, splice, split, splitList, takeWhile, toEntries, toEntries, unshift, zipMethods inherited from interface org.miaixz.bus.core.center.stream.WrappedStream
allMatch, anyMatch, close, collect, collect, count, distinct, easyStream, filter, findAny, findFirst, flatMapToDouble, flatMapToInt, flatMapToLong, forEach, forEachOrdered, isParallel, iterator, limit, mapToDouble, mapToInt, mapToLong, max, min, noneMatch, onClose, parallel, peek, reduce, reduce, reduce, sequential, skip, sorted, sorted, spliterator, toArray, toArray, unordered
-
Method Details
-
merge
根据键与值的集合创建键值对流,若两集合在相同下标的位置找不到对应的键或值,则使用null填充。 比如:[1, 2, 3]与[1, 2]合并,则得到[{1=1}, {2=2}, {3=null}]。- Type Parameters:
K- 键类型V- 值类型- Parameters:
keys- 键集合values- 值集合- Returns:
EntryStream实例
-
of
根据一个Map集合中的键值对创建一个串行流, 对流的操作不会影响到入参的map实例本身- Type Parameters:
K- 键类型V- 值类型- Parameters:
map- 集合- Returns:
EntryStream实例
-
of
- Type Parameters:
K- 键类型V- 值类型- Parameters:
entries-Iterable实例- Returns:
EntryStream实例
-
of
public static <T,K, EntryStream<K,V> V> of(Iterable<T> source, Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends V> valueMapper) 根据一个Collection集合中创建一个串行流- Type Parameters:
T- 元素类型K- 键类型V- 值类型- Parameters:
source- 原始集合keyMapper- 键的映射方法valueMapper- 值的映射方法- Returns:
EntryStream实例
-
of
包装一个已有的流,若入参为空则返回一个空的串行流。 若输入流中存在元素为null,则会映射为一个键值皆为null的键值对。- Type Parameters:
K- 键类型V- 值类型- Parameters:
stream- 流- Returns:
EntryStream实例
-
empty
创建一个空的串行流- Type Parameters:
K- 键类型V- 值类型- Returns:
EntryStream实例
-
distinctByKey
根据键去重,默认丢弃靠后的- Returns:
EntryStream实例
-
distinctByValue
根据值去重,默认丢弃靠后的- Returns:
EntryStream实例
-
filter
根据键和值过滤键值对- Parameters:
filter- 判断条件- Returns:
EntryStream实例
-
filterByKey
根据键过滤键值对- Parameters:
filter- 判断条件- Returns:
EntryStream实例
-
filterByValue
根据值过滤键值对- Parameters:
filter- 判断条件- Returns:
EntryStream实例
-
nonNullKeyValue
过滤流中键值对本身、键值对中的值或键为null的元素- Returns:
EntryStream实例
-
nonNullKey
过滤流中键值对本身,或键值对的键为null的元素- Returns:
EntryStream实例
-
nonNullValue
过滤流中键值对本身,或键值对的值为null的元素- Returns:
EntryStream实例
-
peekKey
检查键- Parameters:
consumer- 操作- Returns:
EntryStream实例
-
peekValue
检查值- Parameters:
consumer- 操作- Returns:
EntryStream实例
-
sortByKey
根据键排序- Parameters:
comparator- 排序器- Returns:
EntryStream实例
-
sortByValue
根据值排序- Parameters:
comparator- 排序器- Returns:
EntryStream实例
-
push
向当前流末尾追加元素- Parameters:
key- 键value- 值- Returns:
EntryStream实例
-
unshift
项当前流队首追加元素- Parameters:
key- 键value- 值- Returns:
EntryStream实例
-
append
将输入元素转为流,返回一个前半段为当前流,后半段为新流的新EasyStream实例- Parameters:
entries- 键值对- Returns:
EntryStream实例
-
prepend
将输入元素转为流,返回一个前半段为新流,后半段为当前流的新EasyStream实例- Parameters:
entries- 键值对- Returns:
EntryStream实例
-
toValueStream
转为值的流- Returns:
- 值的流
-
toKeyStream
转为键的流- Returns:
- 值的流
-
mapKeys
将键映射为另一类型- Type Parameters:
N- 新的键类型- Parameters:
mapper- 映射方法- Returns:
EntryStream实例
-
mapValues
将值映射为另一类型- Type Parameters:
N- 新的值类型- Parameters:
mapper- 映射方法- Returns:
EntryStream实例
-
map
返回与指定函数将元素作为参数执行的结果组成的流 这是一个无状态中间操作- Type Parameters:
R- 函数执行后返回流中元素的类型- Parameters:
mapper- 指定的函数- Returns:
- 返回叠加操作后的流
-
map
将实例转为根据键值对生成的单对象Stream实例- Type Parameters:
N- 函数执行后返回流中元素的类型- Parameters:
mapper- 映射方法- Returns:
- 映射后的单对象组成的流
-
flatMap
public <R> EasyStream<R> flatMap(Function<? super Map.Entry<K, V>, ? extends Stream<? extends R>> mapper) 扩散流操作,可能影响流元素个数,将原有流元素执行mapper操作,返回多个流所有元素组成的流 这是一个无状态中间操作 例如,将users里所有user的id和parentId组合在一起,形成一个新的流:FastStream<Long> ids = FastStream.of(users).flatMap(user -> FastStream.of(user.getId(), user.getParentId()));- Type Parameters:
R- 拆分后流的元素类型- Parameters:
mapper- 操作,返回流- Returns:
- 返回叠加拆分操作后的流
-
flatMapKey
将原有流的键执行mapper操作映射为流,流中的所有所有元素仍然对应原本的值, 然后再返回由这些流中所有元素组成的流新
EntryStream串行流。 效果类似:// unwrap = [{a = 1}, {b = 2}, {c = 3}] unwrap.flatMapKey(data -> Stream.of(data + "1", data + "2")); // unwrap = [{a1 = 1}, {a2 = 1}, {b1 = 2}, {b2 = 2}, {c1 = 3}, {c2 = 3}]- Type Parameters:
N- 新的键类型- Parameters:
keyMapper- 值转映射方法- Returns:
- 返回叠加拆分操作后的流
-
flatMapValue
将原有流的值执行mapper操作映射为流,流中的所有所有元素仍然对应原本的键, 然后再返回由这些流中所有元素组成的流新
EntryStream串行流。 效果类似:// unwrap = [{a = 1}, {b = 2}, {c = 3}] unwrap.flatMapValue(num -> Stream.of(num, num+1)); // unwrap = [{a = 1}, {a = 2}, {b = 2}, {b = 3}, {c = 3}, {c = 4}]- Type Parameters:
N- 新的值类型- Parameters:
valueMapper- 值转映射方法- Returns:
- 返回叠加拆分操作后的流
-
toMap
转为Map集合- Parameters:
mapFactory- 获取集合的工厂方法operator- 当存在重复键时的处理- Returns:
- 集合
- See Also:
-
toMap
转为Map集合- Parameters:
mapFactory- 获取集合的工厂方法- Returns:
- 集合
- See Also:
-
toMap
转为HashMap集合- Returns:
- 集合
- Throws:
IllegalArgumentException- 当键重复时抛出- See Also:
-
toTable
public <N> Table<N,K, toTableV> (BiFunction<? super K, ? super V, ? extends N> rowKeyMapper, Supplier<Map<K, V>> colMapFactory, BinaryOperator<V> operator) - Type Parameters:
N- 父集合的键类型- Parameters:
rowKeyMapper- 将键映射为父集合中键的方法colMapFactory- 创建子集合的工厂方法operator- 当存在重复键时的处理- Returns:
- 集合
- See Also:
-
toTable
- Type Parameters:
N- 父集合的键类型- Parameters:
rowKeyMapper- 创建父集合的工厂方法- Returns:
- 集合
- Throws:
IllegalArgumentException- 当父集合或子集合中的键重复时抛出
-
toTableByKey
public <N> Table<N,K, toTableByKeyV> (Function<? super K, ? extends N> rowKeyMapper, Supplier<Map<K, V>> colMapFactory, BinaryOperator<V> operator) - Type Parameters:
N- 父集合的键类型- Parameters:
rowKeyMapper- 将键映射为父集合中键的方法colMapFactory- 创建子集合的工厂方法operator- 当存在重复键时的处理- Returns:
- 集合
-
toTableByKey
- Type Parameters:
N- 父集合的键类型- Parameters:
rowKeyMapper- 创建父集合的工厂方法- Returns:
- 集合
- Throws:
IllegalArgumentException- 当父集合或子集合中的键重复时抛出
-
toTableByValue
public <N> Table<N,K, toTableByValueV> (Function<? super V, ? extends N> rowKeyMapper, Supplier<Map<K, V>> colMapFactory, BinaryOperator<V> operator) - Type Parameters:
N- 父集合的键类型- Parameters:
rowKeyMapper- 将键映射为父集合中键的方法colMapFactory- 创建子集合的工厂方法operator- 当存在重复键时的处理- Returns:
- 集合
-
toTableByValue
- Type Parameters:
N- 父集合的键类型- Parameters:
rowKeyMapper- 创建父集合的工厂方法- Returns:
- 集合
- Throws:
IllegalArgumentException- 当父集合或子集合中的键重复时抛出
-
groupByKey
将键值对按键分组- Returns:
- 集合
-
groupByKey
将键值对按键分组- Type Parameters:
C- 值集合的类型- Parameters:
collector- 对具有相同键的值的收集器- Returns:
- 集合
-
groupByKey
public <C extends Collection<V>,M extends Map<K, M groupByKeyC>> (Supplier<M> mapFactory, Collector<V, ?, C> collector) 将键值对按键分组- Type Parameters:
C- 值集合的类型M- 返回的map集合类型- Parameters:
mapFactory- 创建map集合的工厂方法collector- 对具有相同键的值的收集器- Returns:
- 集合
-
forEach
遍历键值对- Parameters:
consumer- 操作
-
inverse
将键值对翻转- Returns:
EntryStream实例
-
collectKeys
收集键- Type Parameters:
R- 返回值类型- Parameters:
collector- 收集器- Returns:
- 收集容器
-
collectValues
收集值- Type Parameters:
R- 返回值类型- Parameters:
collector- 收集器- Returns:
- 收集容器
-
anyMatch
是否存在任意符合条件的键值对- Parameters:
predicate- 判断条件- Returns:
- 是否
-
allMatch
所有键值对是否都符合条件- Parameters:
predicate- 判断条件- Returns:
- 是否
-
noneMatch
所有键值对是否都不符合条件- Parameters:
predicate- 判断条件- Returns:
- 是否
-
wrap
根据一个原始的流,返回一个新包装类实例- Parameters:
stream- 流- Returns:
- 实现类
-