我正在尝试从“对象”列表中删除具有特定属性的对象,关于这个问题,我还有其他疑问,但是我想我缺少了一些东西。
该方法不起作用,因为我猜想您无法在遍历列表时从列表中删除元素,因此我创建了一个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);
}
}
答案 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/