【发布时间】:2017-09-21 20:11:17
【问题描述】:
我有一个以特定格式出现的字符串,所以我想将该字符串解析为映射。我有一个将 String 解析为 Map 的方法,它工作正常。
public static Map<String, String> parseStringToMap(String payload) {
try {
return Maps.newHashMap(Splitter.on("|").withKeyValueSeparator("=").split(payload));
} catch (Exception ex) {
return ImmutableMap.of();
}
}
字符串示例:
"type=3|Id=23456|user=13456"
现在有时当我在同一个字符串payload 中有两次具有相同值的相同键时,我上面的方法会失败并抛出异常。例如对于下面的字符串,它不起作用并且失败,然后它返回空映射,因为它有两次 type 键。
"type=3|Id=23456|user=13456|type=3"
我能做些什么来解决这个问题而不是修复字符串有效负载?因此,假设相同的键多次出现,则覆盖映射中的该键值而不是失败。我想返回一个可变映射。
我仍在使用 Java 7。最好和最有效的方法是什么?
【问题讨论】:
-
你能使用 Java 8 吗?如果是这样,您可以使用分组收集器,构建
Map<String, Set<String>>,或类似的。 -
@AndyTurner 不幸的是,我仍在使用 Java 7,还不能使用 Java 8。
标签: java hashmap guava splitter