Java 8:如何将 String 转换为 Map<String,String>?

新手上路,请多包涵

我有一张地图:

 Map<String, String> utilMap = new HashMap();
utilMap.put("1","1");
utilMap.put("2","2");
utilMap.put("3","3");
utilMap.put("4","4");

我把它转换成一个字符串:

 String utilMapString = utilMap
                .entrySet()
                .stream()
                .map(e -> e.toString()).collect(Collectors.joining(","));
Out put: 1=1,2=2,3=3,4=4,5=5

在 Java8 中如何将 utilMapString 转换为 Map?谁能帮帮我?

原文由 Phuong 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

, 拆分字符串以获得单独的映射条目。然后将它们拆分为 = 以获得键和值。

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

注意: 正如 Andreas@ 在评论中 指出的那样,这不是在映射和字符串之间进行转换的可靠方法

编辑:感谢 Holger 的建议。

使用 s.split("=", 2) 确保数组永远不会大于两个元素。这对于不丢失内容很有用(当值具有 = 时)

示例: 当输入字符串为 "a=1,b=2,c=3=44=5555" 时,您将得到 {a=1, b=2, c=3=44=5555}

早些时候(仅使用 s.split("=") )将给出 {a=1, b=2, c=3}

原文由 user7 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是另一个选项,它将 1=1 等术语列表流式传输到地图中。

 String input = "1=1,2=2,3=3,4=4,5=5";
Map<String, String> map = Arrays.asList(input.split(",")).stream().collect(
             Collectors.toMap(x -> x.replaceAll("=\\d+$", ""),
                 x -> x.replaceAll("^\\d+=", "")));
System.out.println(Collections.singletonList(map));

[{1=1, 2=2, 3=3, 4=4, 5=5}]

原文由 Tim Biegeleisen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏