Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以使用功能操作_Java_Function_Netbeans_Foreach - Fatal编程技术网

Java 可以使用功能操作

Java 可以使用功能操作,java,function,netbeans,foreach,Java,Function,Netbeans,Foreach,我在Java中使用for each构造,如下所示: public int getNumRStations() { int numRoutes = 0; for (ArrayList<Route> route : routes) { numRoutes += route.size(); } return numRoutes; } 为什么NetBeans会警告我这一点?我知道我不应该盲目相信IDE,所以这就是我为什么要问的原因 那条新

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

public int getNumRStations() {
    int numRoutes = 0;

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

    return numRoutes;
}
  • 为什么NetBeans会警告我这一点?我知道我不应该盲目相信IDE,所以这就是我为什么要问的原因
  • 那条新线路应该做什么?无论是在现实生活中还是在课堂上,我都没有见过这样的事情

  • 这看起来像是NetBeans建议使用流接口中的map和reduce函数将sum操作重构为Java8“lambda”或函数编程操作。您必须将Java8JDK与NetBeans一起使用

    分解它正在做的事情:

    • “map()”函数正在对
      路由
      数组列表中的所有
      路由
      大小进行计数

    • 然后,“reduce()”函数将执行这些单个大小的总和,以获得路由总数的最终结果

    map()和reduce()函数记录在Java 8文档中,用于提供的流接口


    这个答案涉及“它是什么”,但没有涉及“为什么它更好”。我承认自己仍在学习这些构造。

    因此@paisanco已经解释了每个函数的作用

    我同意IDE建议的修改比原来的更复杂。
    如果我被要求在原始版本和IDE推荐版本之间进行选择,那么我将选择原始版本

    然而,对于您的示例,这里有一种更简单(更受欢迎)的方法

    public int getNumRStations() {
        return routes.stream().mapToInt(x -> x.size()).sum();
    }
    
    在这种情况下,解释也更简单。
    对于每个routes的元素
    x
    ,将其更改为
    x.size()
    ,并将其相加

    x->x.size()
    称为lambda表达式或匿名函数。 就像

    int function(x) {
        return x.size();
    }
    
    (我省略了参数类型。该类型由Java编译器隐式选择。)
    此函数应用于集合的每个元素。这就是
    mapToInt(lambda exp)
    方法所做的

    sum()
    方法似乎不需要解释


    很简单,不是吗?

    这是新的Java 8 API和lambda表达式。您已经更新到Java 8了吗?您的IDE非常智能。这实际上是一种改进吗?似乎更难阅读,打字时间更长,而且运行速度也不快。@immibis这并不是我不想要它,我正在尝试了解它是什么,以及是否适合使用新样式(效率、可维护性问题等)。
    int function(x) {
        return x.size();
    }