gpt4 book ai didi

java - 将格式化字符串解析为多次具有相同键的映射?

转载 作者:行者123 更新时间:2023-12-02 02:35:49 25 4
gpt4 key购买 nike

我有一个特定格式的字符串,所以我想将该字符串解析为映射。我有一个下面的方法,它将字符串解析为映射,并且工作正常。

  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。执行此操作的最佳且有效的方法是什么?

最佳答案

文档说如果有重复的键, split 将抛出异常:

@CheckReturnValue public Map split(CharSequence sequence)

Splits sequence into substrings, splits each substring into an entry, and returns an unmodifiable map with each of the entries. For example, Splitter.on(';').trimResults().withKeyValueSeparator("=>") .split("a=>b ; c=>b") will return a mapping from "a" to "b" and "c" to b.

The returned map preserves the order of the entries from sequence.

Throws: IllegalArgumentException - if the specified sequence does not split into valid map entries, or if there are duplicate keys

所以,您不能使用 MapSplitter 的分割,抱歉!

使用 Java 8:

    return Splitter
.on("|")
.splitToList(payload)
.stream()
.map(kv -> kv.split("="))
.collect(Collectors.toMap(kv -> kv[0], kv -> kv[1], (d1, d2) -> d1));

关于java - 将格式化字符串解析为多次具有相同键的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46352440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com