我有一个返回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)获得一条流并不是很痛苦.

Java相关问答推荐

在URL类图中表示Java swing类

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

Springdoc Whitelabel Error Page with Spring V3

参数值[...]与预期类型java.util.Date不匹配

使用JdkClientHttpRequestFactory通过Spring RestClient和Wiemock读取时达到EOF

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

如何以干净的方式访问深度嵌套的对象S属性?

如何才能使我的程序不会要求两次输入?

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

使用多个RemoteDatabase对象的一个线程

如何仅使用键/ID的一部分(组合)高效地返回映射值?

Java Telnet客户端重复的IAC符号

在Oracle JDBC连接中,连接失效和身份验证失效是什么意思?

舰队运行配置Maven版本

从Spring6中的JPMS模块读取类时出现问题

有没有办法知道在合并中执行了什么操作?

如何使用Java ZoneID的区域设置?

无泄漏函数的Java DRY

放置在变量中的Java成员引用不相等

Jackson YAML:支持锚点扩展/覆盖