Есть объект, и есть view для этого объекта.
Есть Map<String, List<MyObject>>. Необходимо получить Map<String, List<MyObjectView>>.
Сейчас я это делаю так:
Map<String, List<MyObject>> map;
Map<String, List<MyObjectView>> response = new HashMap<>();
for (Map.Entry<String, List<MyObject>> m : map.entrySet()) {
List<MyObjectView> dtos = m.getValue()
.stream()
.map(Function<>)
.collect(Collectors.toList());
response.put(m.getKey(), dtos);
}
В .map с помощью Function происходит преобразование MyObject в MyObjectView.
Можно ли то же самое сделать без создания дополнительной Map-ы(response)?
Можно было бы, если бы у MyObject и MyObjectView был общий супертип
Map<String, List<? extends MyType>> map = ...;
map.replaceAll((k, v) -> v.stream()
.map(function)
.collect(Collectors.toList()));
Но так как типы разные, придётся сгенерировать новое отображение
Map<String, List<MyObjectView>> response = map.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e - > e.getValue()
.stream()
.map(function)
.collect(Collectors.toList())));
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости