Java 8 map.replaceAll 方法抛出 UnsupportedOperationException
Java 8 map.replaceAll method throws UnsupportedOperationException
我正在尝试替换“;”用“,”
Map<String, String> params =// Random method
params.replaceAll((key, value) -> value.replaceAll(";", ","));
第 2 行抛出以下异常。
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.replaceAll(Collections.java:1510)
我正在尝试用逗号替换值中的任何分号。
您在错误中看到它说 UnmodifiableMap。您正在使用不可修改的集合,这意味着它在创建后只能读取。
查看代码源代码如下:
public Map<String, String> split(CharSequence sequence) {
Map<String, String> map = new LinkedHashMap<String, String>();
for (String entry : outerSplitter.split(sequence)) {
Iterator<String> entryFields = entrySplitter.splittingIterator(entry);
checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
String key = entryFields.next();
checkArgument(!map.containsKey(key), "Duplicate key [%s] found.", key);
checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
String value = entryFields.next();
map.put(key, value);
checkArgument(!entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
}
return Collections.unmodifiableMap(map);
}
你可以注意到它 returns Collections.unmodifiableMap(map)
.
要使其可修改,您可以简单地创建一个 HashMap 的新实例,例如:
Map paramMap = new HashMap<>(Splitter.on(",").withKeyValueSeparator(":").split(lineitem));
正如@NiVeR 所说,com.google.common.base.Splitter.split() 正在返回一个不可修改的映射。
您可以在开始修改值之前将不可修改的映射复制到可修改的映射中。
例如;
Map paramMap = Splitter.on(",").withKeyValueSeparator(":").split(lineitem);
paramMap = Maps.newHashMap(paramMap);
paramMap.replaceAll((key, value) -> value.replaceAll(";", ","));
我正在尝试替换“;”用“,”
Map<String, String> params =// Random method
params.replaceAll((key, value) -> value.replaceAll(";", ","));
第 2 行抛出以下异常。
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.replaceAll(Collections.java:1510)
我正在尝试用逗号替换值中的任何分号。
您在错误中看到它说 UnmodifiableMap。您正在使用不可修改的集合,这意味着它在创建后只能读取。
查看代码源代码如下:
public Map<String, String> split(CharSequence sequence) {
Map<String, String> map = new LinkedHashMap<String, String>();
for (String entry : outerSplitter.split(sequence)) {
Iterator<String> entryFields = entrySplitter.splittingIterator(entry);
checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
String key = entryFields.next();
checkArgument(!map.containsKey(key), "Duplicate key [%s] found.", key);
checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
String value = entryFields.next();
map.put(key, value);
checkArgument(!entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
}
return Collections.unmodifiableMap(map);
}
你可以注意到它 returns Collections.unmodifiableMap(map)
.
要使其可修改,您可以简单地创建一个 HashMap 的新实例,例如:
Map paramMap = new HashMap<>(Splitter.on(",").withKeyValueSeparator(":").split(lineitem));
正如@NiVeR 所说,com.google.common.base.Splitter.split() 正在返回一个不可修改的映射。
您可以在开始修改值之前将不可修改的映射复制到可修改的映射中。
例如;
Map paramMap = Splitter.on(",").withKeyValueSeparator(":").split(lineitem);
paramMap = Maps.newHashMap(paramMap);
paramMap.replaceAll((key, value) -> value.replaceAll(";", ","));