我有一个返回java.lang.Iterable<T>
的接口.
我想使用Java8Stream API来操作该结果.
然而,Iterable不能"串流".
您知道如何在不将Iterable转换为List的情况下将其用作Stream吗?
我有一个返回java.lang.Iterable<T>
的接口.
我想使用Java8Stream API来操作该结果.
然而,Iterable不能"串流".
您知道如何在不将Iterable转换为List的情况下将其用作Stream吗?
有一个比直接使用spliteratorUnknownSize
更好的答案,这既容易,又能得到更好的结果.Iterable
有一个spliterator()
方法,所以你应该用它来得到你的拆分器.在最坏的情况下,这是相同的代码(默认实现使用spliteratorUnknownSize
),但是在更常见的情况下,您的Iterable
已经是一个集合,您将获得更好的拆分器,从而获得更好的流性能(甚至可能是良好的并行性).它的代码也更少:
StreamSupport.stream(iterable.spliterator(), false)
.filter(...)
.moreStreamOps(...);
正如你所看到的,从Iterable
(另请参见this question)获得一条流并不是很痛苦.