我在迭代器的for循环中传递标签列表,但引发了ConcurrentModificationException

 public void clearTag() {
    List<Tag> tags = binding.search.tagView.getTags();
    Log.d(TAG, "clearTags: " + tags);
    for (Tag tag : tags) {
        Log.d(TAG, "clearTag: " + tag + " " + tag.getLayoutColor());
        if (tag.getLayoutColor() == R.color.red) {
           tags.remove(tag);
        } else if (tag.getLayoutColor() == R.color.blue) {
            tags.remove(tag);
        } else if (tag.getLayoutColor() == R.color.green) {
            tags.remove(tag);
        }
    }
    updateTagVisibility();
    //resetFilter();
}

最佳答案

这是因为在遍历数组时不允许进行remove和add操作。因此,您需要存储所有要删除的元素到另一个数组中,然后立即删除它们。这是一个例子:

public void clearTag() {
    List<Tag> tags = binding.search.tagView.getTags();
    List<Tag> tagsToRemove = new ArrayList<>();
    Log.d(TAG, "clearTags: " + tags);
    for (Tag tag : tags) {
        Log.d(TAG, "clearTag: " + tag + " " + tag.getLayoutColor());
        if (tag.getLayoutColor() == R.color.red) {
           tagsToRemove.add(tag);
        } else if (tag.getLayoutColor() == R.color.blue) {
            tagsToRemove.add(tag);
        } else if (tag.getLayoutColor() == R.color.green) {
            tagsToRemove.add(tag);
        }
    }
    tags.removeAll(tagsToRemove);
    updateTagVisibility();
    //resetFilter();
}

07-24 09:24