首页 > 解决方案 > 按条件删除数组列表中的元素

问题描述

我正在从被arrayList调用的itemList. 我已经制定了一种方法来通过它和findItem查找一个项目。callNumbercopyNumber

在我的中,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;

}

我想要的结果是当条件为真时从列表中删除指定的项目。

标签: javaarraylist

解决方案


根据某些条件从列表中删除项目。

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);

推荐阅读