我试图从ArrayList中删除一个对象,但是在使用for循环遍历列表之后,我陷入了下一步的困境。 nameInput是用户的小写字符串。
如果运行此命令,它将从arr列表中打印对象,该对象等于nameInput的输入。但是我不知道如何从打印该对象到删除它?
我确定这是一个愚蠢的问题,但是我阅读并尝试过的50多个答案似乎都使我失望(或更可能是我听不懂)。我已经尝试过list.remove和removeIf。
private ArrayList<Arr> arr = new ArrayList<>();
private void removeItem() {
for (Object arr : arr) {
if (((Arr) arr).getName().equals(nameInput())) {
System.out.println(arr);
break;
} else {
System.out.println("Error");
}
}
}
答案 0 :(得分:5)
List<Arr> arr = new ArrayList<>();
for (Arr item : arr) {
if (item.getName().equals(nameInput())) {
arr.remove(item);
break;
}
}
如果在删除元素之后未调用break
,则会得到ConcurrentElementException
@Aomine 中的注释:您必须实现正确的Arr.equals()
方法。
List<Arr> arr = new ArrayList<>();
Iterator<Arr> it = arr.iterator();
while (it.hasNext()) {
Arr items = it.next();
if (item.getName().equals(nameInput())) {
it.remove();
break; // you can continue iterating and remove another item
}
}
List<Arr> arr = new ArrayList<>();
arr.removeIf(item -> item.getName().equals(nameInput()));
删除所有符合指定条件的项目
从ArrayList
中删除元素不是很好。如果您知道必须从List
的中间删除元素,请使用LinkedList
。
答案 1 :(得分:1)
在遍历/迭代for
循环中的列表时,您试图删除一个项目。您无法从列表中删除项目,并在for循环中对其进行迭代。改用Iterator
并调用arr.remove()
。
答案 2 :(得分:1)
如果您使用Java 8,则可以
private void removeItem() {
arr.removeIf(t -> t.getName().equals(nameInput));
}
请注意,这将删除名称等于nameInput
的所有对象
您还应该将arr
的声明更改为
List<Arr> arr = new ArrayList<>();
答案 3 :(得分:0)
这里有几件事...
Arr
而不是Object
,因为列表包含Arr
对象。这也意味着您不再需要执行的演员表。remove(Object o)
删除项目,但这仅需基于equals
覆盖hashcode
和name
。另一个选择是通过迭代器,但这将意味着完全更改代码。因此,为了使其尽可能接近您的代码,您可以使用for
循环;获取对象所在的索引,然后删除。因此,您可以这样做:
for(int i = 0; i < arr.size(); i++){
if (arr.get(i).getName().equals(nameInput)) {
Arr obj = arr.remove(i); // remove the item by index
System.out.println(obj); // print the object
break; // terminate the loop iteration
}
}