在进行迭代时,NetBeans建议使用函数式方法进行迭代.

最初的方法是:

for (Type obj : collection) {
    foo();
}

不过,NetBeans强调了这种实施方法,并建议:

collection.forEach((obj) -> {
    foo();
});

为什么这会更可取呢?Java是否有一个标准(类似于针对Python的PEP8)来推荐函数式方法而不是先前的实现策略?

这两种方法之间的变化,如果有的话,在幕后发生了什么?

这似乎是句法糖分的不同?

推荐答案

这在很大程度上是风格问题.

例如,在OpenJDK中,只需使用增强的for循环即可实现Iterable#forEach:

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

使用增强的for循环和forEach之间的主要区别在于,您只能有效地访问传递给forEachConsumer中的最终局部变量.如果您想给局部变量赋值,那么增强的for循环显然是更好的 Select .

Java相关问答推荐

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

最小拓Flutter 排序的时间复杂度是多少?

scanner 如何在执行hasNextLine一次后重新读取整个文件?

ittext pdf延迟签名,签名无效

使用动态ID从json获取详细信息的Jolt规范

SpringBootreact 式Web应用程序的Spring Cloud Configer服务器中的资源控制器损坏

调用引发泛型异常的泛型方法时出现编译错误

名称冲突具有相同的擦除

在运行MVN测试时,为什么构建失败,并显示了java.lang.ClassNotFoundException:java.net.http.HttpResponse?

返回响应时,CamelCase命名约定不起作用

如何使用带有谓词参数的方法,而不使用lambda表达式

JOOQ中的子查询使用的是默认方言,而不是配置的方言

如何在Java记录中设置BigDecimal类型属性的精度?

Java构造函数分支

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

在Eclipse中调试未导出的JDK模块的Java包

Java页面筛选器问题

如何使这两种方法合二为一?

如何将RESTAssured';S的Http标题转换为<;字符串、字符串和>的映射?

声纳覆盖范围为 0%,未生成 jacoco.xml