我有HashMap个叫testMap,包含String, String个.

HashMap<String, String> testMap = new HashMap<String, String>();

在迭代映射时,如果value与指定的字符串匹配,我需要从映射中删除键.

for(Map.Entry<String, String> entry : testMap.entrySet()) {
  if(entry.getValue().equalsIgnoreCase("Sample")) {
    testMap.remove(entry.getKey());
  }
}

testMap包含"Sample",但我无法从HashMap中删除密钥.
相反,收到错误:

"Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
    at java.util.HashMap$EntryIterator.next(Unknown Source)
    at java.util.HashMap$EntryIterator.next(Unknown Source)"

推荐答案

try :

Iterator<Map.Entry<String,String>> iter = testMap.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry<String,String> entry = iter.next();
    if("Sample".equalsIgnoreCase(entry.getValue())){
        iter.remove();
    }
}

使用Java 1.8及更高版本,您只需一行即可完成上述操作:

testMap.entrySet().removeIf(entry -> "Sample".equalsIgnoreCase(entry.getValue()));

Java相关问答推荐

Java小程序未在MacOS上运行

从头开始使用Jgit初始化InMemoryRepository

获取拦截器内部的IP地址

无法运行Java(已解决)

如果一个子类没有构造函数,超类也没有构造函数,那么为什么我可以构造子类的实例呢?

springboot start loge change

将数组整体转换为链接表

使用意向过滤器从另一个应用程序启动服务

Java构造函数分支

在Eclipse中调试未导出的JDK模块的Java包

当构造函数创建一个新实例时,Java为什么需要&new";

Regex以查找不包含捕获组的行

Spring Boot中的应用程序.properties文件中未使用的属性

STREAMS减少部分结果的问题

在Oracle中调用输出参数在索引处缺少IN或OUT参数的函数

Java中的发布/订阅-Long Live和Short Live Publisher,哪种方法是正确的?

在ECLIPSE上的M1 Pro上运行JavaFX的问题

获取所有可以处理Invent.ACTION_MEDIA_BUTTON Android 13 API33的Android包

Java System.getProperty在哪里检索user.home?

如何显示新布局