从一个包含多个ArrayList的ArrayList中移除索引

3

我试图从一个ArrayList列表中删除一个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),但没有任何作用。 编辑:所谓“无法工作”,是指未删除任何内容,根据我的条件,应该删除其中的某些内容,但它仍然显示出来。

1
“不起作用”是不能解决问题的。ArrayList 是一个列表,就像数组一样,每个元素都有一个索引,你不能简单地“删除索引”。请详细告诉我们您希望它如何工作。如果您想删除项目但保持索引不变(可以通过将项目替换为 null 来实现),您可以尝试使用反向循环(从 size-1 到 0,然后您可以保持删除)。 - Sheepy
使用迭代器是推荐的方法,但您也可以克隆原始列表以删除其项目。 - royalghost
1个回答

2

如果您在迭代集合时要删除元素,应该使用其迭代器Iterator。否则,您将遇到ConcurrentModificationException异常(我认为这就是您所说的“不起作用”):

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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接