Преобразование потоков Java 8 и список - PullRequest
0 голосов
/ 30 октября 2018

У меня есть:

Map<String,List<String>> persons

И каждый String элемент в List<String> представляет собой Long

Итак, я хочу превратить мой Map<String,List<String>> в Map<String,List<Long>>

Проблема в том, что мой Список заключен в карту. Я знаю с одним списком, я могу сделать это:

list.stream().map(s -> Long.valueOf(s)).collect(Collectors.toList());

Но мой случай немного другой. Есть идеи, как поступить?

Спасибо

Ответы [ 3 ]

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

Вы можете использовать этот сбор:

list.stream().map(s -> Long.valueOf(s)).collect(Collectors.toList());

в качестве параметра valueMapper toMap(), примененного к потоку карты.

Что даст:

import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;

Map<String,List<String>> persons = ...;
Map<String,List<Long>> personsMapped = 
persons.entrySet()
       .stream()
       .collect(toMap(Entry::getKey, e -> e.getValue().stream()
                                                      .map(Long::valueOf)
                                                      .collect(toList()))
               );
0 голосов
/ 30 октября 2018

Вы можете сделать это так,

Map<String, List<Long>> longMap = persons.entrySet().stream()
    .collect(Collectors.toMap(Map.Entry::getKey,
        e -> e.getValue().stream().map(s -> Long.valueOf(s)).collect(Collectors.toList())));
0 голосов
/ 30 октября 2018
 Map<String,List<String>> persons = ...

 Map<String, List<Long>> result = new HashMap<>();

 persons.forEach((key, value) -> {
        result.put(key, value.stream().map(Long::valueOf).collect(Collectors.toList()));
 });
...