作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
似乎 Splitter.MapSplitter 方法返回一个不可修改的映射。有没有办法让它不返回不可修改的 map ,以便我稍后可以添加到该 map ?或者我必须将不可修改的 map 复制到常规 map 中才能添加?
Map<String, String> testParametersMap = new HashMap<String, String>();
testParametersMap = Splitter.on(",").withKeyValueSeparator(":").split(browser:chrome,browser-version:56,language:english);
testParametersMap.putIfAbsent("country", "US");
最后一行抛出异常...
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.putIfAbsent(Collections.java:1515)
最佳答案
Guava 的 Splitter
始终返回不可变的集合,因此您不能让它返回可变的内容。相反,您应该将其结果复制到可变的 Map
实现中。
Map<String, String> testParametersMap = new LinkedHashMap<>(Splitter.on(",").withKeyValueSeparator(":").split("browser:chrome,browser-version:56,language:english"));
testParametersMap.putIfAbsent("country", "US");
或者,与您所写的类似,您应该使用 putAll
而不是重新分配变量:
Map<String,String> testParametersMap = new LinkedHashMap<>();
testParametersMap.putAll(Splitter.on(",").withKeyValueSeparator(":").split("browser:chrome,browser-version:56,language:english"));
testParametersMap.putIfAbsent("country", "US");
您可以使用任何实现,例如 HashMap
、TreeMap
、LinkedHashMap
等。正如 Xaerxess 在评论中提到的,如果这对您很重要,请支持 LinkedHashMap
,因为它保留顺序或元素。
关于java - 如何让 Guava 的 Splitter.split 不返回不可修改的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48933070/
我是一名优秀的程序员,十分优秀!