HashMap с использованием потоков и подстроки - PullRequest
0 голосов
/ 02 сентября 2018

Мне интересно, как добиться следующего.

"t12345-g1234-o1234"

У меня есть строка, содержащая несколько полей, разделенных дефисом, и поле состоит из его идентификатора (первой буквы) и значения.

Как мне получить Карту, подобную приведенной ниже, используя потоки Java 8.

{"t", "12345"}, {"g", "1234"}, {"o", "1234"}

EDIT

Я пробовал следующее, но я не понимаю, как получить информацию о подстроке.

Arrays.stream(line.split("-"))
.collect(Collectors.toMap(String::substring(0,1),String::substring(1));

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вы можете использовать Collectors.toMap

Map<String, String> result = Arrays.stream(s.split("-"))
            .collect(Collectors.toMap(part -> part.substring(0, 1),
                    part -> part.substring(1)));

Первый аргумент toMap - это keyMapper. Он выбирает ключ как первый символ в разделенной части строки. part.substring(0, 1) - Возвращает подстроку, начиная с индекса 0 длины 1 (который является первым символом).

Вторым аргументом является valueMapper. Остальное следует за первым персонажем. part.substring(1) - Возвращает подстроку, начиная с индекса 1 (поскольку индекс конца не указан, он будет принят за part.length.

0 голосов
/ 02 сентября 2018

Примерно так:

Map<String, String> map = Arrays.stream(str.split("-"))
                .map(s -> Pair.of(s.substring(0, 1), s.substring(1)))
                .collect(Collectors.toMap(Pair::getKey, Pair::getValue));

Я использовал Пара здесь.

...