Package org.miaixz.bus.core.xyz
Class StreamKit
java.lang.Object
org.miaixz.bus.core.xyz.StreamKit
Stream 工具类- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> Stream<T> 删除 与指定断言 匹配的元素, 在第一次不匹配时终止, 返回当前(第一个不匹配元素)及剩余元素组成的新流static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next) 返回无限有序流 该流由 初始值 然后判断条件 以及执行 迭代函数 进行迭代获取到元素static <T> Stream<T> iterateHierarchies(T root, Function<T, Collection<T>> discoverer) 指定一个层级结构的根节点(通常是树或图), 然后获取包含根节点在内,根节点所有层级结构中的节点组成的流。 该方法用于以平铺的方式按广度优先对图或树节点进行访问,可以使用并行流提高效率。static <T> Stream<T> iterateHierarchies(T root, Function<T, Collection<T>> discoverer, Predicate<T> filter) 指定一个层级结构的根节点(通常是树或图), 然后获取包含根节点在内,根节点所有层级结构中的节点组成的流。 该方法用于以平铺的方式按广度优先对图或树节点进行访问,可以使用并行流提高效率。static <T> Stringjoin(Stream<T> stream, CharSequence delimiter) 将Stream中所有元素以指定分隔符,合并为一个字符串,对象默认调用toString方法static <T> Stringjoin(Stream<T> stream, CharSequence delimiter, Function<T, ? extends CharSequence> toStringFunc) 将Stream中所有元素以指定分隔符,合并为一个字符串按行读取文件为Stream按行读取文件为Streamstatic <T> Stream<T> static <T> Stream<T> 按行读取文件为Stream按行读取文件为Streamstatic <T> Stream<T> of(T... array) static <T> Stream<T> of(T seed, UnaryOperator<T> elementCreator, int limit) 通过函数创建Streamstatic <T> Stream<T> static <T> Stream<T> static intreadAvailable(InputStream in, byte[] b, int off, int len) static voidreadFully(InputStream in, byte[] b, int off, int len) static voidskipFully(InputStream in, long n) static <T> Stream<T> 保留 与指定断言 匹配时的元素, 在第一次不匹配时终止, 抛弃当前(第一个不匹配元素)及后续所有元素
-
Constructor Details
-
StreamKit
public StreamKit()
-
-
Method Details
-
of
- Type Parameters:
T- 元素类型- Parameters:
array- 数组- Returns:
Stream,如果提供的array为null,返回Stream.empty()
-
of
- Type Parameters:
T- 集合元素类型- Parameters:
iterable- 集合- Returns:
Stream,如果提供的iterator为null,返回Stream.empty()
-
of
- Type Parameters:
T- 集合元素类型- Parameters:
iterable- 集合parallel- 是否并行- Returns:
Stream,如果提供的iterator为null,返回Stream.empty()
-
ofIter
- Type Parameters:
T- 集合元素类型- Parameters:
iterator- 迭代器- Returns:
Stream,如果提供的iterator为null,返回Stream.empty()
-
ofIter
- Type Parameters:
T- 集合元素类型- Parameters:
iterator- 迭代器parallel- 是否并行- Returns:
Stream,如果提供的iterator为null,返回Stream.empty()
-
of
按行读取文件为Stream- Parameters:
file- 文件- Returns:
Stream,如果提供的file为null,返回Stream.empty()
-
of
按行读取文件为Stream- Parameters:
path- 路径- Returns:
Stream,如果提供的file为null,返回Stream.empty()
-
of
按行读取文件为Stream- Parameters:
file- 文件charset- 编码- Returns:
Stream,如果提供的file为null,返回Stream.empty()
-
of
按行读取文件为Stream- Parameters:
path- 路径charset- 编码- Returns:
Stream,如果提供的path为null,返回Stream.empty()
-
of
通过函数创建Stream- Type Parameters:
T- 创建元素类型- Parameters:
seed- 初始值elementCreator- 递进函数,每次调用此函数获取下一个值limit- 限制个数- Returns:
Stream
-
join
将Stream中所有元素以指定分隔符,合并为一个字符串,对象默认调用toString方法- Type Parameters:
T- 元素类型- Parameters:
stream-Streamdelimiter- 分隔符- Returns:
- 字符串,如果stream为
null,返回null
-
join
public static <T> String join(Stream<T> stream, CharSequence delimiter, Function<T, ? extends CharSequence> toStringFunc) 将Stream中所有元素以指定分隔符,合并为一个字符串- Type Parameters:
T- 元素类型- Parameters:
stream-Streamdelimiter- 分隔符toStringFunc- 元素转换为字符串的函数- Returns:
- 字符串,如果stream为
null,返回null
-
iterate
返回无限有序流 该流由 初始值 然后判断条件 以及执行 迭代函数 进行迭代获取到元素- Type Parameters:
T- 元素类型- Parameters:
seed- 初始值hasNext- 条件值next- 用上一个元素作为参数执行并返回一个新的元素- Returns:
- 无限有序流
-
iterateHierarchies
public static <T> Stream<T> iterateHierarchies(T root, Function<T, Collection<T>> discoverer, Predicate<T> filter) 指定一个层级结构的根节点(通常是树或图), 然后获取包含根节点在内,根节点所有层级结构中的节点组成的流。 该方法用于以平铺的方式按广度优先对图或树节点进行访问,可以使用并行流提高效率。
eg:
Tree root = // 构建树结构 // 搜索树结构中所有级别为3的节点,并按权重排序 List<Tree> thirdLevelNodes = StreamKit.iterateHierarchies(root, Tree:getChildren) .filter(node -> node.getLevel() == 3) .sorted(Comparator.comparing(Tree::getWeight)) .toList();- Type Parameters:
T- 元素类型- Parameters:
root- 根节点,根节点不允许被filter过滤discoverer- 下一层级节点的获取方法filter- 节点过滤器,不匹配的节点与以其作为根节点的子树将将会被忽略- Returns:
- 包含根节点在内,根节点所有层级结构中的节点组成的流
- See Also:
-
iterateHierarchies
指定一个层级结构的根节点(通常是树或图), 然后获取包含根节点在内,根节点所有层级结构中的节点组成的流。 该方法用于以平铺的方式按广度优先对图或树节点进行访问,可以使用并行流提高效率。
eg:
Tree root = // 构建树结构 // 搜索树结构中所有级别为3的节点,并按权重排序 List<Tree> thirdLevelNodes = StreamKit.iterateHierarchies(root, Tree:getChildren) .filter(node -> node.getLevel() == 3) .sorted(Comparator.comparing(Tree::getWeight)) .toList();- Type Parameters:
T- 元素类型- Parameters:
root- 根节点,根节点不允许被filter过滤discoverer- 下一层级节点的获取方法- Returns:
- 包含根节点在内,根节点所有层级结构中的节点组成的流
- See Also:
-
takeWhile
保留 与指定断言 匹配时的元素, 在第一次不匹配时终止, 抛弃当前(第一个不匹配元素)及后续所有元素与 jdk9 中的 takeWhile 方法不太一样, 这里的实现是个 顺序的、有状态的中间操作
本环节中是顺序执行的, 但是后续操作可以支持并行流
但是不建议在并行流中使用, 除非你确定 takeWhile 之后的操作能在并行流中受益很多
- Type Parameters:
T- 元素类型- Parameters:
source- 源流predicate- 断言- Returns:
- 与指定断言匹配的元素组成的流
-
dropWhile
删除 与指定断言 匹配的元素, 在第一次不匹配时终止, 返回当前(第一个不匹配元素)及剩余元素组成的新流与 jdk9 中的 dropWhile 方法不太一样, 这里的实现是个 顺序的、有状态的中间操作
本环节中是顺序执行的, 但是后续操作可以支持并行流
但是不建议在并行流中使用, 除非你确定 dropWhile 之后的操作能在并行流中受益很多
- Type Parameters:
T- 元素类型- Parameters:
source- 源流predicate- 断言- Returns:
- 剩余元素组成的流
-
readFully
- Throws:
IOException
-
skipFully
- Throws:
IOException
-
readAvailable
- Throws:
IOException
-