一尘不染

使用Java 8 JDK将Iterable转换为Stream

java

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

我想使用Java 8 Stream API处理该结果。

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

任何想法如何将Iterable用作流而不转换为List?


阅读 313

收藏
2020-03-12

共1个答案

一尘不染

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

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

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

2020-03-12