java - 按条件删除数组列表中的元素
问题描述
我正在从被arrayList
调用的itemList
. 我已经制定了一种方法来通过它和findItem
查找一个项目。callNumber
copyNumber
在我的中,remove()
我使用findItem()
来定位该项目,然后将其删除。我的问题是我仍然收到concurrentmodificationexception
错误。
我已经尝试了增强的 for 循环(我知道它不起作用),并且我已经尝试了迭代器(它应该可以工作)并且仍然得到错误。
这是我试图让它发挥作用的第三个策略。还有哪些其他策略将遍历列表并删除项目并绕过concurrentmodificationexception
?
/**
* Finds an item by call number and copy number.
*
* @param callNumber the call number
* @param copy the copy number
* @return the item, if not found return null
*/
private Item getItem(String callNumber, int copy)
{
for (int i = 0; i < numItems; i++)
{
Item item = itemList.get(i);
if (item.getCallNumber() != null
&& item.getCallNumber().equals(callNumber)
&& item.getCopyNumber() == copy)
{
return item;
}
}
return null;
}
/**
* Deletes a item from the library.
*
* @param callNumber the call number of the item to be deleted.
* @param copy the copy number of the item to be deleted.
* @return <code>true</code> if the item was deleted successfully,
* and <code> false</code> if the item was not deleted.
*/
public boolean deleteItem(String callNumber, int copy)
{
Item rItem = getItem(callNumber, copy);
if(rItem == null)
{
return false;
}
if (rItem.getCallNumber().equals(callNumber)
&& rItem.getCopyNumber() == copy)
{
itemList.remove(rItem);
numItems--;
return true;
}
return false;
}
我想要的结果是当条件为真时从列表中删除指定的项目。
解决方案
根据某些条件从列表中删除项目。
List<Integer> al = new ArrayList<>();
al.add(605);
al.add(260);
al.add(306);
al.add(7);
al.add(6);
Iterator itr = al.iterator();
while (itr.hasNext()) {
int x = (Integer) itr.next();
if (x < 300)
itr.remove();
}
System.out.println(" ArrayList : " + al);
推荐阅读
- javascript - 如何从 Vue 中的组件更改视图文件上的 :class 名称?
- ubuntu-18.04 - 带有 Ubuntu 18.04 的 MSI GS75 -- 一些 fn 键不起作用(仅音量/亮度起作用)
- kubernetes - Microk8s 上的 Weavescope 无法识别容器
- php - PHP中的JSON字符串到UTF8
- node.js - 通过应用授予对 s3 私有存储桶中用户特定图像的访问权限
- readxl - as.Date() 函数不起作用,我的字符仍然是字符
- python - 在 Python 中使用 MATLAB 回归
- r - 相关矩阵问题
- spring-boot - Elasticsearch 在启动期间抛出错误
- python - 使pycharm在Windows 7 32位中工作的任何解决方案