在for循环中从列表中删除对象

时间:2019-01-30 18:35:27

标签: java arrays list object

我正在尝试从“对象”列表中删除具有特定属性的对象,关于这个问题,我还有其他疑问,但是我想我缺少了一些东西。

该方法不起作用,因为我猜想您无法在遍历列表时从列表中删除元素,因此我创建了一个Dog removeDog = null;变量,该变量在循环期间和之后设置为正确的狗 完成迭代,我可以做animals.remove(removeDog); (我不知道这是否是最好的解决方案)

for (Dog dog : animals.getDogList()){
  if (dog.getDogName().equals(dogName)){
    animals.getDogList().remove(dog);
  }
}

相反,此方法可以完美地工作,在我看来,它应该具有与上一个相同的问题,但是在这种情况下,Java让我在迭代过程中删除了一个或多个元素,但是我不明白其中的区别。

for (Dog dog : animals.getDogList()){
  if (dog.getWeigh() > weight){
    animals.getDogList().remove(dog);
  }
}

3 个答案:

答案 0 :(得分:0)

在迭代List时使用迭代器删除元素。

在您的方法中,您首先要遍历循环以识别匹配项并将该匹配项存储在名为removeDog的临时变量中。您的这种方法有一个局限性,即只能删除符合给定条件的狗。

for (Iterator<Dog> iterator = animals.getDogList().iterator(); iterator.hasNext();) {
    Dog dog= iterator.next();
    if (dog.getDogName().equals(dogName)){
        // Remove the current dog from the iterator and the list.
        iterator.remove();
    }
}

此方法比您的方法更好(更安全)。如果使用我的方法,则可以删除所有符合给定条件的狗。

如果您喜欢简洁的代码,也可以使用Collections::removeIf方法。请参阅以下使用lambda的单行代码。它将与Java 8或更高版本一起使用。

animals.getDogList().removeIf(dog -> dog.getDogName().equals(dogName));

答案 1 :(得分:0)

迭代器doggerator = animals.getDogList()。iterator(); while(doggerator.hasnext(){ ... doggerator.remove() ... }

答案 2 :(得分:-1)

java.util.Iterator类具有remove()方法,允许您在迭代列表时从列表中删除项目。以下网址提供了示例和更多说明。

https://www.geeksforgeeks.org/remove-element-arraylist-java/