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

Phu*_*ong 5 java lambda java-8 java-stream

我有一张地图:

Map<String, String> utilMap = new HashMap();
utilMap.put("1","1");
utilMap.put("2","2");
utilMap.put("3","3");
utilMap.put("4","4");
Run Code Online (Sandbox Code Playgroud)

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

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

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

use*_*er7 14

拆分字符串,以获取单个映射条目.然后将它们拆分=以获取密钥和值.

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

注意:正如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}

  • 使用`s.split("=",2)`确保数组永远不会超过两个元素.虽然我们无法修复含糊不清的`=`字符,但是当有更多内容时,我们可以防止丢失内容. (3认同)