iterator.remove 非法状态异常,尽管调用 next prior

问题描述 投票:0回答:0

我有一段代码,我至少运行了 100 次没有问题,我需要使用不同的类重新实现一个类似的版本,所以我重写了它,现在在迭代器上调用 remove 时出现非法状态异常.但是在调试时,所有信息都在那里,可以按预期删除元素。

新资产是一个数组

List<DTO> dtoList = this.getAssets();
    for(int i = 0; i < newAssets.length; i++) {
      Iterator<DTO> iterator = dtoList.iterator();
      while (iterator.hasNext()) {
        DTO current = iterator.next();
        if(condition) {
          iterator.remove();
          newAssets[i] = null;
          break;
        }
      }
    }

这会产生非法状态异常错误

与此同时

    for(int i = 0; i < array.length; i++) {
      Iterator<diffDTO> iterator = dbList.iterator();
      while (iterator.hasNext()) {
        diffDTO current = iterator.next();
        if(condition)) {
          iterator.remove();
          array[i] = null;
          break;
        }
      }
    }

每次都很好,我完全不明白其中的区别。

我知道我需要在 .remove 之前在迭代器上调用 .next,我每次都这样做,然后跳出迭代 while 循环,因此 remove 应该只在被迭代的列表上调用一次。我已经审查了我能找到的所有实例,所有建议状态,在删除之前调用 next,我在第二个代码块中成功完成了。调试它显示所有值都按预期在执行时出现,但 remove 调用抛出该异常。

拜托,谁能指出我不明白的地方?我从字面上复制了第二个块,更新了变量的命名,但无法让第一个块运行。真的很茫然试图找到差异。

我希望从第一个代码块中获得与第二个代码块相同的功能,但它抛出了一个非法状态异常。

java list illegalstateexception
© www.soinside.com 2019 - 2024. All rights reserved.