我在Java中使用for-each构造,如下所示:

public int getNumRStations() {
    int numRoutes = 0;

    for (ArrayList<Route> route : routes) {
        numRoutes += route.size();
    }

    return numRoutes;
}

NetBeans显示警告/通知,内容为“可以使用功能性操作”。自动解决后,新生成的代码将显示以下内容:
public int getNumRStations() {
    int numRoutes = 0;

    numRoutes = routes.stream().map((route) -> route.size()).reduce(numRoutes, Integer::sum);

    return numRoutes;
}
  • 为什么NetBeans警告我这一点?我知道我不应该盲目地信任IDE,所以这就是我要问的原因。
  • 该新行应该做什么?在现实生活中或在类里面,我从未见过类似的东西。
  • 最佳答案

    看起来NetBeans建议将您的sum操作重构为Java 8“lambda”或使用map的函数编程操作,并从Stream接口(interface)简化函数。您必须将Java 8 JDK与NetBeans一起使用。

    分解正在做什么:

  • “map()”函数正在对route数组列表
  • 中的所有routes大小进行计数
  • 然后,“reduce()”函数对这些单个大小进行求和,以得出路由总数的最终结果。

  • Java(8)文档中针对流接口(interface)可用的at this link记录了map()和reduce()函数

    该答案针对“它是什么”,但没有针对“为什么更好”。我承认我自己仍然会学习这些构造。

    10-08 11:03