【问题标题】:Transforming JAVA stream throws IllegalStateException: Duplicate key [duplicate]转换 JAVA 流抛出 IllegalStateException: Duplicate key [duplicate]
【发布时间】:2021-03-04 21:14:06
【问题描述】:

前段时间有人问过这个question

输入字符串:utilMapString = "1=1,2=2,3=3,4=4,5=5"

Map<String, String> reconstructedUtilMap = Arrays.stream(utilMapString.split(","))
            .map(s -> s.split("="))
            .collect(Collectors.toMap(s -> s[0], s -> s[1]));

如果我将输入更改为“101|Google,102|Amazon”并执行相同的转换,代码会抛出 IllegalStateException: Duplicate key

Map<String, String> reconstructedUtilMap = Arrays.stream(utilMapString.split(","))
                .map(s -> s.split("|", 2))
                .collect(Collectors.toMap(s -> s[0], s -> s[1]));

谁能解释一下这两组操作的确切区别。

【问题讨论】:

  • 提示:"101|Google,102|Amazon".split("|") 的结果不是我认为你期望的那样
  • 非常感谢@JonSkeet,得到了我所缺少的东西。

标签: java java-stream


【解决方案1】:

您需要在第二个split() 调用中转义管道字符。像这样:

Map<String, String> reconstructedUtilMap = Arrays.stream("101|Google,102|Amazon" .split(","))
                .map(s -> s.split("\\|"))
                .collect(Collectors.toMap(s -> s[0], s -> s[1]));

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 2018-06-27
    • 2018-12-01
    • 2015-12-10
    • 2018-01-17
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多