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