这个问题更笼统,与两种风格的利弊无关。问题是,我是否应该尽可能使用Stream而不是for循环,因为它具有良好的声明性且具有良好的可读性?
我正在和我的同事争论使用流和for循环的优缺点。我同意我们应该在90%的时间内首选流,但是我相信在某些情况下,最好使用for循环而不是流。
例如,我需要对元素集合执行一些操作,而这些操作可能会引发Checked Exception。在操作过程中,如果任何元素发生异常,我都想完全退出执行,因此我将其用于循环并将其包装在try / catch块中。我的同事不满意,因为结果占用的行数比如果我要使用流的情况多两倍。我通过创建自己的自定义功能接口(重写了受检查的异常和静态方法,将它们转换为引发未检查的异常(此处为示例))重写了它,最后看起来像这样:
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);
}
Run Code Online (Sandbox Code Playgroud)
他很高兴,因为它花了不到两倍的时间来编写代码。
这是一个简单的示例,看起来还不错,但是我相信这里的旧循环是处理这种情况的更简单,更快捷的方法。我们是否应该倾向于尽可能地使用Streams?
var当您浏览代码并调查乍一看不清楚的代码时,这并不是很少。当开发人员使用非自描述方法名称时,您必须花一些时间来了解变量的真实类型。如果你使用 lombok 的,var你将与 lombok 紧密结合,所以我不会在我的代码中经常使用它
var在 java 中使用的有用用例是什么?