![](/img/trans.png)
[英]How to Convert a Map<String, List<String>> to Map<String, String> in java 8
[英]Java 8: How to convert String to 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? 谁能帮帮我?
拆分字符串,
以获取单独的地图条目。 然后用=
分割得到键和值。
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}
这是另一个选项,它将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}]
如果你想从String生成一个地图,你可以通过以下方式:
Map<String, String> newMap = Stream.of(utilMapString.split("\\,"))
.collect(Collectors.toMap(t -> t.toString().split("=")[0], t -> t.toString().split("=")[1]));
如果序列可能包含具有相同键的值 - 使用
Map<String, String> skipDuplicatesMap = Stream.of("1=1,2=2,3=3,4=4,5=5".split(",")).
map(el -> el.split("=")).
collect(toMap(arr -> arr[0], arr -> arr[1], (oldValue, newValue) -> oldValue));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.