Java 如何获得番石榴';s Splitter.split不返回不可修改的映射

Java 如何获得番石榴';s Splitter.split不返回不可修改的映射,java,guava,Java,Guava,似乎Splitter.mapslitter方法返回一个不可修改的映射。有没有办法让它不返回一个不可修改的映射,以便我以后可以添加到该映射?或者我必须将不可修改的地图复制到常规地图中进行添加 Map<String, String> testParametersMap = new HashMap<String, String>(); testParametersMap = Splitter.on(",").withKeyValueSeparator(":").split(br

似乎Splitter.mapslitter方法返回一个不可修改的映射。有没有办法让它不返回一个不可修改的映射,以便我以后可以添加到该映射?或者我必须将不可修改的地图复制到常规地图中进行添加

Map<String, String> testParametersMap = new HashMap<String, String>();
testParametersMap = Splitter.on(",").withKeyValueSeparator(":").split(browser:chrome,browser-version:56,language:english);
testParametersMap.putIfAbsent("country", "US");
将结果复制到您选择的实现中 番石榴的
Splitter
总是返回不可变的集合,所以不能让它返回可变的内容。相反,您应该将其结果复制到可变的
Map
实现中

Map<String, String> testParametersMap = new LinkedHashMap<>(Splitter.on(",").withKeyValueSeparator(":").split("browser:chrome,browser-version:56,language:english"));
testParametersMap.putIfAbsent("country", "US");
您可以使用任何实现,如
HashMap
TreeMap
LinkedHashMap
等。正如Xaerxess在评论中提到的,如果这对您来说很重要的话,请支持
LinkedHashMap
,因为它保留了顺序或元素。

将结果复制到您选择的实现中 番石榴的
Splitter
总是返回不可变的集合,所以不能让它返回可变的内容。相反,您应该将其结果复制到可变的
Map
实现中

Map<String, String> testParametersMap = new LinkedHashMap<>(Splitter.on(",").withKeyValueSeparator(":").split("browser:chrome,browser-version:56,language:english"));
testParametersMap.putIfAbsent("country", "US");

您可以使用任何实现,如
HashMap
TreeMap
LinkedHashMap
等。正如Xaerxess在评论中提到的,如果这对你来说很重要的话,请支持
LinkedHashMap
,因为它保留了顺序或元素。

LinkedHashMap将是我的选择,因为它保留了顺序,这非常重要(但YMMV)。@Xaerxess确实如此。我更新了答案,你的第二个解决方案非常有效。实际上,顺序并不重要,所以我保留了HashMap,但会记住这一点。LinkedHashMap将是我的选择,因为它保留了顺序,这一点非常重要(但YMMV)。@Xaerxess确实如此。我更新了答案,你的第二个解决方案非常有效。实际上,顺序并不重要,所以我保留了HashMap,但会记住这一点。
Map<String,String> testParametersMap = new LinkedHashMap<>();
testParametersMap.putAll(Splitter.on(",").withKeyValueSeparator(":").split("browser:chrome,browser-version:56,language:english"));
testParametersMap.putIfAbsent("country", "US");