删除arraylists的arraylist中的索引

时间:2018-04-30 02:30:13

标签: java arraylist

我正在尝试删除arraylists列表中的arraylist但它似乎没有工作。在我的代码的上下文中,我有多个路由在arraylist中。每条路线都是地方的arraylist。

public static void removeBadRoutes(ArrayList<ArrayList<Place>> routes, Expedition e) { 
    for(int i = 0; i < routes.size(); i++) {
        if(!isGoodRoute(routes.get(i), e)) {
            routes.remove(routes.get(i));
        }
    }
}

我也尝试过routes.remove(i)没有做任何事情。 编辑:通过&#34;不工作&#34;我的意思是没有任何东西被删除,它仍然显示应该根据我的条件删除的路线。

1 个答案:

答案 0 :(得分:2)

要在迭代它时从Collection中删除元素,您应该使用其Iterator;否则,你最终会遇到ConcurrentModificationException(我希望你指的是&#34;不工作&#34;):

public static void removeBadRoutes(ArrayList<ArrayList<Place>> routes, Expedition e) { 
    for (Iterator<ArrayList<Place>> it = routes.iterator(); it.hasNext();) {
        if (!isGoodRoute(it.next(), e)) {
            it.remove();
        }
    }
}

此外,使用Java 8,您可以使用List#removeIf

public static void removeBadRoutes(ArrayList<ArrayList<Place>> routes, Expedition e) {
    routes.removeIf(route -> !isGoodRoute(route, e));
}