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

时间:2018-10-08 04:31:24

标签: 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");

我将其转换为字符串:

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?谁可以帮助我?

4 个答案:

答案 0 :(得分:8)

,分割字符串以获取单个地图条目。然后将它们除以=以获得键和值。

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

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

编辑: 感谢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}

答案 1 :(得分:1)

这是另一个选项,可将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}]

答案 2 :(得分:0)

如果您想通过String生成地图,可以通过以下方式进行:

const Column = ({data}) => (

    <div>
        {data.map(option => (
          <div className={option.rowclass}>{option.text}</div>
        ))}
    </div>
)

答案 3 :(得分:0)

如果序列可能包含具有相同键的值-请使用

599, 601, 600