java - 如何从 ListIterator 中删除所有元素然后添加新元素

标签 java iterator

如何从 ListIterator 中删除所有元素,然后添加新元素。我在最后一行添加到迭代器时遇到 ConcurrentModificationException

public static void doAction(List<String> list) {
    for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext(); ) {
        String s1 = iterator.next();
        if(s1.equals("XYZ")){
            while(iterator.hasNext()) {
                iterator.next();
                iterator.remove();
            }
            list.add("123");
            list.add("456");
            list.add("789");
            list.forEach(iterator::add);
        }
    }
}

最佳答案

您收到异常的原因是您在迭代列表时尝试添加到列表中。 List#forEach 将很快失败,并且仍然会在迭代过程中对底层列表进行结构修改时抛出 ConcurrentModificationException (即在您的情况下, iterator::add Action )。

现在,为了实现您想要实现的目的,您的方法可以像这样重写和修改:

public static void doAction(List<String> list) {
     if (list.contains("XYZ")) {
         list.clear();
         list.add("123");
         list.add("456");
         list.add("789");
     }
}

这更加简单且易于遵循。您只需检查您要查找的值是否存在于给定列表中,然后只需调用 List#clear 即可清空传入的值。然后您将添加新元素,然后就可以开始了。

关于java - 如何从 ListIterator 中删除所有元素然后添加新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59803578/

相关文章:

java - 如何显示通知栏?

c++ - c++ 中没有 std::tuple 的 std::iterator 有什么原因吗?

java在windows中删除目录

Java - 当变量等于字符串时,If 语句未捕获

java - Android 新手 - 了解 OutputStreamWriter 在 Web 服务调用中的使用

c# - 找出给定长度的所有可能单词的好方法是什么

javascript - Mustache.js 中数组元素的索引

Java sha256 与 Swift sha256 不匹配

iterator - 我该如何编写一个迭代器来返回对自身的引用?

python - 中断后重新启动 for 循环