在Java中尝试使用for each循环迭代hashmap时出错

w8f9ii69  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(221)

当我尝试运行这段代码时

void wordsContainingLetter(char c){
        for(String s:wordbank.keySet()){
            char[] chars = s.toCharArray();
            boolean contains=false;
            for (char ch:chars) {
                if(ch==c){
                    contains=true;
                    break;
                }
            }
            if(!contains){
                wordbank.remove(s);
            }
        }
    }

它给了我这个错误在for each循环Exception in thread "main" java.util.ConcurrentModificationException这是hashmap的定义HashMap<String,Integer> wordbank = new HashMap<String,Integer>();它不是空的当代码运行时
我希望for each循环遍历hashmap

8yparm6h

8yparm6h1#

我知道你说你已经弄明白了,但是因为你使用的是HashMap,所以有一种更简单的方法可以使用内置的removeAll方法。
试试这个

void wordsContainingLetter(char c){
  wordbank.keySet().removeAll(wordbank.entrySet().stream().filter(entry -> entry.getKey().contains(String.valueOf(c))).map(Map.Entry::getKey).collect(
        Collectors.toList()));
}
oxf4rvwz

oxf4rvwz2#

我发现了问题所在。因为我正在循环它并试图同时从其中删除某些内容,所以它引起了冲突。所以我将创建一个新的散列表,其中包含我想要删除的内容,然后通过新的散列表并从主词库中删除

相关问题