【问题标题】:Remove an element while iterating a list迭代列表时删除元素
【发布时间】:2018-07-18 07:55:38
【问题描述】:

我正在尝试使用 Iterator 从列表中删除一个元素,但出现以下异常:

java.util.NoSuchElementException

代码:

for (Iterator<Punk> iter = list.listIterator(); iter.hasNext(); ) {
    Punk p = iterator.next();

    if (some condition ) {
        iterator.remove();
    }

    index += 1;
}

我每次只在循环中使用一次iterator.next(),以便它移动到下一个元素。任何人都可以帮忙吗?提前致谢!任何帮助表示赞赏。

【问题讨论】:

  • 能否请您添加整个堆栈跟踪?
  • 不确定index 的用途,但似乎与这个问题无关。
  • 你定义了iter,然后不使用?迭代器从何而来?
  • 在 for 循环中,您将迭代器变量声明为 iter,但从 iterator 中删除。

标签: java collections foreach iterator


【解决方案1】:

您正在使用iterator,但您使用iter 迭代此列表。确保您的变量名称正确。

for (Iterator<Punk> iter = list.listIterator(); iter.hasNext(); ) {
    Punk p = iter.next();

    if (some condition ) {
        iter.remove();
    }
}

【讨论】:

  • 这可以通过list.removeIf(p -&gt; some condition);进一步减少
  • 我更喜欢 while 循环方法。将Iterator 放入for 看起来...很笨重。
  • @Aominè 非常感谢您的建议。但我们使用的是 java 7 :)
  • @Bucket 谢谢。我创建了另一个迭代器并使用它。很抱歉在这里浪费时间。我有时想知道这些愚蠢的错误如何花费这么多时间:/
  • 这里发布的大多数问题事后看来都是“愚蠢的错误”。有时,当您因连续数小时盯着代码而感到疲倦时,这并不明显。只要我们找到解决方案,就不会浪费时间。
猜你喜欢
  • 2013-01-23
  • 2016-11-21
  • 2016-07-19
  • 2011-04-02
  • 1970-01-01
  • 2019-09-11
  • 2015-06-30
  • 2020-11-25
  • 1970-01-01
相关资源
最近更新 更多