【问题标题】:How to delete last x element of a list after performing some operation on them?对列表执行某些操作后如何删除列表的最后一个 x 元素?
【发布时间】:2021-08-23 12:08:00
【问题描述】:

我知道如何迭代列表的最后 n 个元素:

for(int i = list.size()-1; i>elements ; i --)
{
   list.element.get(i).makeSomeStuff();
   list.remove(list.element.get(i));
}

但我需要安全地从列表中删除元素,而不会弄乱索引

【问题讨论】:

  • 嗨,您发布的代码可以编译吗? list.element 是什么?如果是普通的java.util.List,不应该只是list吗?

标签: java


【解决方案1】:

这个想法是创建一个辅助列表来保存您要从原始列表中删除的对象。

List<MyObject> toBeRemovedList = new ArrayList()<>;
for(int i = list.size()-1; i>elements ; i --)
{
    MyObject myObject = list.get(i);
    myObject.makeSomeStuff();  //perform object action
    toBeRemovedList.add(myObject); //add the object into the removal list
}

list.removeAll(toBeRemovedList); //remove all the elements of the removal list from the originating list, no index interfering 

【讨论】:

  • 为什么要用单独的列表toBeRemovedList?,我们可以直接从列表中删除吧。它不会影响任何事情
  • @Mahesh 是的,它似乎没有影响任何东西(因为列表末尾的项目被删除了),这就是原作者在他的代码中所做的,但这不是一个好主意在列表上循环时删除元素。
【解决方案2】:

如果您需要从集合中删除元素(在您的情况下为 List),请使用迭代器而不是索引 for 循环。见Remove entries from the list using iterator

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多