使用Java8JDK将Iterable转换为流

我有一个接口,它返回java.lang.Iterable<T&gt

我想使用Java8流API来处理这个结果

然而,Iterable不能“流”

你知道如何将Iterable用作流而不将其转换为List吗

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

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

如您所见,从Iterable获取流(另请参见这个问题不太痛苦

发表评论