Как повернуть карту в карту ? - PullRequest
0 голосов
/ 26 марта 2020

В части кода, в которой у меня есть ситуация, тип коллекции мне нужен:

Map<Specialization, List<SpecialistInfo>> specialistsMap = specialistsResponse
    .getSpecialists()
    .stream()
    .collect(groupingBy(SpecialistInfo::getSpecializations));

Но на самом деле этот поток возвращает Map<List<Specialization>, List<SpecialistInfo>>.

. Метод getSpecialists() возвращает List<SpecialistInfo> specialists;, и каждый экземпляр SpecialistInfo также содержит список. Итак, метод getSpecializations возвращает List<Specialization> specializations

Мне нужно сгруппировать карту в Map<Specialization, List<SpecialistInfo>>.

Как это можно сделать через Stream API?

1 Ответ

3 голосов
/ 26 марта 2020

Итак, у вас есть List<SpecialistInfo>, а у каждого SpecialistInfo есть List<Specialization>. Вам нужно поменять местами карту. Предположительно, тогда Specialization и SpecialistInfo уникальны, и существует отношение «многие ко многим» между Specializations и SpecialistInfo.

Если вы ищете решение, не использующее потоки API, который является поточно-ориентированным (по сравнению с решением YCF_L)

List<SpecialistInfo> specialists = getSpecialists();
Map<Specialization, List<SpecialistInfo>> specMap = new HashMap<>();
for (SpecialistInfo specInfo : specialists) { 
    for (Specialization spec : specInfo.getSpecializations()) {
        specMap.computeIfAbsent(spec, k -> new ArrayList<>()).add(specInfo);
    }
}

...