当前位置: 首页 > 知识库问答 >
问题:

ConcurrentModificationException(当我为一个集[duplicate]执行addAll时)

龙繁
2023-03-14

我在下面的代码中的allstates.addAll(states)处获得了一个concurrentModificationException。我怎样才能避免这种情况呢?

public synchronized Set<String> getAllStates(String clientName, Map<String, Set<String>> allClientStates) {
    Set<String> allStates = new ConcurrentSkipListSet<>();
    final Set<String> keySet = allClientStates.keySet();
    for(String key: keySet) {
      Set<String> states = allClientStates.get(key);
      if(states != null)
        allStates.addAll(states);
    }
    return allStates;
  }

这是stacktrace的顶部

exception": "null\njava.util.ConcurrentModificationException\n\tat java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)\n\tat java.util.HashMap$KeyIterator.next(HashMap.java:1469)\n\tat java.util.AbstractCollection.addAll(AbstractCollection.java:343)\n\tat com.xxx.config.ClientDashboardConfig.getAllStates(ClientDashboardConfig.java:312)

共有1个答案

慕宏儒
2023-03-14
allClientStates.values().stream()
    .flatMap(keys -> keys.stream())
    .collect(Collectors.toSet());
 类似资料:
  • 这段代码应该创建一组数字(集合),将20个不同的数字放入其中,并从集合中删除所有大于1的数字。但当我运行它时,出现了一个错误:ConcurrentModificationException,

  • 问题内容: 当我尝试在代码中执行HQL时,发生以下异常。我在各个站点中进行了检查,发现antlr.2.7.6.jar shd位于类路径中。我在项目中检查了此内容,发现在我的Maven依赖项中存在该内容。因此,不应有任何此类问题。但是我仍然遇到这个问题。谁能在这方面帮助我。我在“ empList = getHibernateTemplate()。find(“来自Employee”);“行中收到此错误

  • Map.addAll()函数将其他所有键值对添加到此映射中。 语法 (Syntax) Map.addAll(Map<K, V> other) 参数(Parameter) other - 表示键值对。 Return Type - 无效 例子 (Example) void main() { Map m = {'name':'Tom','Id':'E1001'}; print('Ma

  • 当多个进程并行运行时,Drools似乎会给出不正确的结果,并且在每个进程中,每次都会创建和处理一个新的对象。 试用版本:, 细节: 我并行执行了120个任务(使用7个线程)。在这120项任务中,drools对108项任务给出了正确的结果,但对12项任务执行了错误的规则(每次运行失败的任务数量各不相同)。 让我在这里发布代码和输出: 你知道这背后的原因吗? 更新:以上代码仅用于测试目的,以查看Kie

  • 问题内容: 我在Java和Selenium上获得了一些不错的动手能力。当我使用相同的“ Input_Search_Box” Webelement执行click方法时,它将引发nullpointer异常。我已经用谷歌搜索并尝试了一些解决方法,例如添加线程,添加显式等待,但仍然不知道我想念的地方。任何建议将不胜感激。 这是我的代码: 问题答案: 如果页面已更改/重新加载,则需要再次使用find。 有时