使用Java 8 JDK将迭代转换为流

2022-08-31 04:24:22

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

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

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

任何想法如何使用可迭代作为流而不将其转换为列表?


答案 1

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

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

如您所见,从中获取流(另请参阅此问题)并不是很痛苦。Iterable


答案 2

如果可以使用番石榴库,从版本21开始,您可以使用

Streams.stream(iterable)

推荐