Как получить доступ к вложенным элементам карты в потоке? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть вложенный Map объект как этот:

Map<String,Map<Integer,Double>> items = getMap();

У меня есть класс с именем MyClass, его конструктор выглядит так:

public MyClass(String city, int month, double average){}

Теперь я хочу преобразовать items в MyClass список следующим образом:

List<MyClass> myList = items.entrySet().stream()
                                       .map(i-> new MyClass(i.getKey(), ?, ?))
                                       .collect(Collectors.toList()); 

но я не знаю, что я должен использовать вместо ? для доступа к вложенным Integer и Double значениям из Map объекта?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вот очень компактный способ без потоков, но с использованием функций Java 8:

List<MyClass> myList = new ArrayList<>();
items.forEach((city, innerMap) -> innerMap.forEach(month, average) -> 
                                  myList.add(new MyClass(city, month, average)));
0 голосов
/ 15 ноября 2018

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

List<MyClass> myList = items.entrySet()
    .stream()
    .flatMap(entry -> entry.getValue().entrySet()
        .stream()
        .map(innerEntry -> new MyClass(entry.getKey(), innerEntry.getKey(), innerEntry.getValue()))
    )
    .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...