Java 8: Как преобразовать строку в карту? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть карта:

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

Как преобразовать utilMapString в Map в Java8?Кто может мне помочь?

Ответы [ 4 ]

0 голосов
/ 08 октября 2018

Если последовательность может содержать значения с одним и тем же ключом - используйте

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));
0 голосов
/ 08 октября 2018

Если вы хотите создать карту из String, вы можете сделать это следующим образом:

Map<String, String> newMap = Stream.of(utilMapString.split("\\,"))
            .collect(Collectors.toMap(t -> t.toString().split("=")[0], t -> t.toString().split("=")[1]));
0 голосов
/ 08 октября 2018

Вот еще один вариант, который направляет список терминов 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}]
0 голосов
/ 08 октября 2018

Разделите строку на ,, чтобы получить отдельные записи карты.Затем разделите их на =, чтобы получить ключ и значение.

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

Примечание: Как указано Andreas @ в комментариях , этоне надежный способ преобразования между картой и строкой

EDIT : спасибо Хольгеру за это предложение.

Используйте 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}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...