我有MultivalueMap和TreeMap,它们都有String类型的键值。
我希望将MultivalueMap中的任何键更改为TreeMap中的键。
这是我的代码,为什么我会得到ConcurrentModificationException以及如何解决它?
public RestRequest(MultivaluedMap<String, Object> myHeaders,TreeMap<String, String> testParameters) {
this.testParameters = testParameters;
buildUrl();
Client client = ClientBuilder.newClient();
Set<String> keys = myHeaders.keySet();
for (String key : keys) {
myHeaders.remove(key);
myHeaders.add(key, testParameters.get(key));
}
this.myHeaders = myHeaders;
myResource = client.target(URL);
entity=Entity.entity(replaceRequestBodyWithParams(requestBody), MediaType.APPLICATION_JSON);
}
您不能修改正在迭代的基础集合。您在映射的keyset
上进行循环,并在循环中尝试更改该映射,这也会更改键集。
要实现此方法中所要实现的目标,更好的方法是构造一个新的数据结构,如下所示:
public RestRequest(MultivaluedMap<String, Object> myHeaders,TreeMap<String, String> testParameters) {
this.testParameters = testParameters;
buildUrl();
Client client = ClientBuilder.newClient();
Set<String> keys = myHeaders.keySet();
final Map<String, String> testParamsByHeader = new HashMap<>();
for (String key : keys)
testParamsByHeader.add(key, testParameters.get(key));
}
this.myHeaders = testParamsByHeader;
myResource = client.target(URL);
entity=Entity.entity(replaceRequestBodyWithParams(requestBody), MediaType.APPLICATION_JSON);
}
问题内容: 有什么不同之处与使得迭代器不会引发异常而引发异常?最后,两者都在修改集合大小。 请在这里忽略多线程。我只是在谈论一个for-each循环和一个迭代器循环。据我所知,for-each循环仅在内部创建迭代器。 我很困惑。 问题答案: 不会抛出,因为这是在迭代时修改集合的 允许 方式。这是什么的Javadoc的说: 从基础集合中移除此迭代器返回的最后一个元素(可选操作)。每次调用next()
我使用的是Java14,但我记得它在过去的版本中是有效的。
所有订阅操作都使用以下内容: 所有取消订阅操作都使用以下内容: 和通知者:
我有类A和子类B和C。 我使用inheritanceType.single_table,一列type用作discriminatorColumn。 前面,B类有DiscriminatorValue(“1”),C类有DiscriminatorValue(“2”)。我有大约100多个条目在表中,所有的工作都很好。 会有什么问题?
问题内容: 我有以下代码,我希望它抛出,但运行成功。为什么会这样? 问题答案: 的上方法删除指定位置的元素。在开始循环之前,您的列表如下所示: 然后,在列表上启动迭代器: 您的环然后删除 位置1处的元件 ,这是数字2: 在下一个隐式调用上,迭代器返回,然后循环终止。 如果将更多元素添加到列表中,则会得到一个。然后隐式将抛出。 请注意,从Javadoc 到JCF: 注意,迭代器的快速失败行为无法得到
问题内容: 为什么这段代码不抛出?它在不使用方法的情况下修改了一段时间,这是唯一安全的删除方法。 如果将替换为,则会得到相同的结果。但是,如果我将列表更改为或只是得到了预期的异常。到底是怎么回事?我正在使用是否相关。 编辑 我找到了以下链接 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4902078 相关部分是 天真的解决方案是将协同修改