Java 如何在迭代期间从arraylist中删除对象?

Java 如何在迭代期间从arraylist中删除对象?,java,android,android-studio,arraylist,iterator,Java,Android,Android Studio,Arraylist,Iterator,我正在Android Studio中构建一个应用程序,其中包含各种树木和灌木的首选项和复选框。你选中一个框,表示你想要一棵具有某种特征的树,代码会在我创建了一个Plant类的目录中的所有树木和灌木的arraylist中运行,属性包括大小、名称、果实、,etc并将符合该条件的对象的所有字符串名称添加到另一个要在不同屏幕上打印的称为“选择”的字符串列表中。在另一个步骤中打印之前,将消除重复项 问题在于在迭代过程中从arraylist中删除对象。以下是一个示例: if (cb_s.isChec

我正在Android Studio中构建一个应用程序,其中包含各种树木和灌木的首选项和复选框。你选中一个框,表示你想要一棵具有某种特征的树,代码会在我创建了一个Plant类的目录中的所有树木和灌木的arraylist中运行,属性包括大小、名称、果实、,etc并将符合该条件的对象的所有字符串名称添加到另一个要在不同屏幕上打印的称为“选择”的字符串列表中。在另一个步骤中打印之前,将消除重复项

问题在于在迭代过程中从arraylist中删除对象。以下是一个示例:

    if (cb_s.isChecked()) {
        for(Plant p : test){
            if(p.getSize() == "s"){
                selection.add(p.getName());
            }
            else{
                selection.remove(p.getName());
                test.remove(p);
            }
        }
    }
    if (cb_m.isChecked()) {
        for(Plant p : test){
            if(p.getSize() == "m"){
                selection.add(p.getName());
            }
            else{
                selection.remove(p.getName());
                test.remove(p);
            }
        }
    }
    if (cb_l.isChecked()) {
        for(Plant p : test){
            if(p.getSize() == "l"){
                selection.add(p.getName());
            }
            else{
                selection.remove(p.getName());
                test.remove(p);
            }
        }
    }    
对于选中的每个复选框,它都会运行一个名为“test”的arraylist来选择与复选框对应的植物。在本例中,这三个块将选择小植物、中植物和大植物—s、m和l,并将它们添加到另一个字符串arraylist中,以便稍后打印。它还会从第一个arraylist test中删除植物,以便在选中其他复选框时无法对它们进行比较。这将导致最终的植物列表不符合使用复选框选择的所有条件

Java不喜欢我试图从arraylist“test”中删除元素的方式,因为这就是我正在迭代的内容。如果对象不符合条件,那么在迭代过程中删除对象的正确方法是什么?我听说我应该使用实际集合的迭代器?对于这段代码,我该怎么做呢

谢谢

例如,不要将字符串与==方法进行比较,而是在所有情况下使用.equals进行比较

p.getSize().equals("s")
反而

p.getSize() == "s"

如果要在遍历列表时从列表中删除项目,则应使用迭代器执行以下操作:

Iterator<Plant> iterator = test.iterator();
while (iterator.hasNext()) {
    p = iterator.next();
    if(p.getSize().equals("l")){
        selection.add(p.getName());
    } else {
        selection.remove(p.getName());
        iterator.remove();
    }
}
您还应该将字符串与equals方法进行比较将检查对象是否为同一实例,而equals将检查字符串中是否有相同的内容。

的可能重复项