Вы видите в ошибке, что она говорит 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);
}
Вы можете заметить, что он возвращаетCollections.unmodifiableMap(map)
.
Чтобы сделать его модифицируемым, вы можете просто создать новый экземпляр HashMap, например:
Map paramMap = new HashMap<>(Splitter.on(",").withKeyValueSeparator(":").split(lineitem));