首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 8流操作优化了吗?

java 8流操作优化了吗?
EN

Stack Overflow用户
提问于 2018-06-26 14:48:36
回答 1查看 611关注 0票数 0

有一个简单的查询,它过滤一个列表并获取找到的项的字段值。

代码语言:javascript
复制
myList.getParents().stream()
                .filter(x -> x.getSomeField() == 1)
                .map(x -> x.getOtherField())
                .findFirst();

操作是否像代码中那样一个接一个地执行:从初始列表中,我们过滤所有someField为1的地方,然后我们创建一个值为另一个字段的新列表,然后我们取这个新列表中的第一个字段。

让我们假设这个列表中有1,000,000个条目,过滤后它们是1000个。它会映射这1000个项目来只获取其中的第一个项目吗?

如果我改变顺序,它是否会优化性能,或者它本身是否足够智能?

代码语言:javascript
复制
myList.getParents().stream()
   .filter(x -> x.getSomeField() == 1)
   .findFirst()
   .map(x -> x.getOtherField());
EN

回答 1

Stack Overflow用户

发布于 2018-06-26 15:00:38

不,在Java8流处理流水线中,一个数据项在一次遍历中被处理。这样我们就可以执行短路评估,并给我们更多的优化空间。

例如,在您的案例中,我们采用第一项,应用筛选器,假设它满足筛选器条件。然后,我们继续进行映射并推送该元素。我们不需要访问流源中的任何其他元素,因为我们在一遍中处理它。这种短路评估允许我们进行更多的优化。

然而,处理流水线的第二种表示是错误的。你不能把map放在最后。但是,终端操作findFirst应该在管道的末尾。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51036500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档