簡體   English   中英

Java 8:如何將String轉換為Map <String,String> ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM