小编典典

使用 Java 8 JDK 将 Iterable 转换为 Stream

all

我有一个返回的接口java.lang.Iterable<T>

我想使用 Java 8 Stream API 来操作该结果。

但是 Iterable 不能“流式传输”。

知道如何在不将 Iterable 转换为 List 的情况下将 Iterable 用作 Stream 吗?


阅读 118

收藏
2022-03-14

共1个答案

小编典典

有一个比spliteratorUnknownSize直接使用更好的答案,这既更容易,也能得到更好的结果。
Iterable有一个spliterator()方法,所以你应该用它来获取你的拆分器。在最坏的情况下,它是相同的代码(默认实现使用spliteratorUnknownSize),但在更常见的情况下,您Iterable已经是一个集合,您将获得更好的拆分器,从而获得更好的流性能(甚至可能是良好的并行性)。它的代码也更少:

StreamSupport.stream(iterable.spliterator(), false)
             .filter(...)
             .moreStreamOps(...);

如您所见,从Iterable获取流并不是很痛苦。

2022-03-14