【发布时间】:2019-03-23 18:19:23
【问题描述】:
这个问题比较笼统,与两种风格的pros and cons 无关。 问题是我是否应该更喜欢使用 Stream 而不是 for 循环,因为它是具有良好可读性的声明式?
我正在和我的同事争论使用流和 for 循环的利弊。我同意我们应该在 90% 的时间内更喜欢流,但我相信在某些情况下使用 for 循环而不是流更好。
例如,我需要对元素集合执行多个操作,这些操作可能会引发 Checked Exception。在操作期间,如果任何元素发生异常,我想完全退出执行,所以我使用 for 循环并将其包装在 try/catch 块中。我的同事不满意,因为 result 占用的行数是 If 我使用 stream 的两倍。我通过创建自己的自定义函数接口来重写它,该接口抛出检查的异常和静态方法以将它们转换为抛出未检查的异常(示例here),最后它看起来像这样:
try {
Map<String, String> someResult= elements.stream()
.filter(throwingPredicateWrapper(element-> client.hasValue(element)))
.collect(
Collectors.toMap(Function.identity(),
throwingFunctionWrapper(element -> client.getValue(element))));
return someResult;
} catch (Exception e) {
LOGGER.error("Error while processing", e);
}
他很高兴,因为它减少了两倍的代码行数。
这是一个简单的例子,看起来并没有那么糟糕,但我相信这里的旧循环是处理这种情况的更简单和更快的方法。 我们是否应该尽可能地使用 Streams?
【问题讨论】:
-
我喜欢 for 循环......它更容易调试,但那只是我。
-
仅供参考,您可以将
element -> client.getValue(element)替换为client::getValue。
标签: java