【发布时间】:2014-04-24 10:08:24
【问题描述】:
使用新的 Stream API 进行简单迭代有什么好处吗?
没有 Stream API:
for (Map.Entry<String, String> entry : map.entrySet()) {
doSomething(entry);
}
使用流 API:
map.entrySet().stream().forEach((entry) -> {
doSomething(entry);
});
代码的长度和可读性大致相同。是否有任何重要的差异(例如在性能方面)?
【问题讨论】:
-
如果 Streams 可以使您的代码更短并且更具可读性,则应该使用它。所以你的用例本身并不是一个很好的例子。但是,如果您要使用
map.forEach方法本身,那么使用 lambdas 是有一定意义的,但话又说回来,此时您不再使用流。 -
同样适用于entrySet;您可以说
map.entrySet().forEach(…)而无需流。在单个方法调用的情况下,map.entrySet().forEach(context::doSomething);形式比 lambda 表达式更可取,因为它真的更短且更具可读性。因此,如果您有一个 现有 方法doSomething采用单个条目实例或两个匹配键和值的参数,那么使用forEach(…)是有意义的。 -
另外,即使你这样写,第二个例子中的括号也不需要。我认为这样更具可读性...
-
谢谢大家,我从三个 cmets 身上学到了一些东西。 Netbeans 强调了非流版本并建议进行更改。我按回车键,然后 Netbeans 生成了上面的流版本...
标签: java-8 java-stream