我有一个接口,它返回java.lang.Iterable<;T>
我想使用Java8流API来处理这个结果
然而,Iterable不能“流”
你知道如何将Iterable用作流而不将其转换为List吗
有一个比直接使用spliterator或unknownsize好得多的答案,它既简单又能得到更好的结果Iterable有一个spliterator()方法,所以您应该使用它来获取拆分器。在最坏的情况下,它是相同的代码(默认实现使用spliterator unknownsize),但在更常见的情况下,如果Iterable已经是一个集合,您将获得更好的spliterator,从而获得更好的流性能(甚至可能是良好的并行性)。它的代码也更少:
StreamSupport.stream(iterable.spliterator(),false)
.filter(…)
.moreStreamOps(…);
如您所见,从Iterable获取流(另请参见这个问题不太痛苦