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