У меня следующий класс:
public class Foo {
private String areaName;
private String objectName;
private String lineName;
}
Теперь я хочу преобразовать List<Foo> в Map<String, Map<String, List<String>>>. Я нашел этот ответ, который помог мне разработать следующий код:
Map<String, Map<String, List<String>>> testMap = foos.stream().collect(Collectors.groupingBy(e -> e.getAreaName(),
Collectors.groupingBy(e -> e.getObjectName(), Collectors.collectingAndThen(Collectors.toList(),
e -> e.stream().map(f -> f.getLineName())))));
Единственная проблема с этим кодом - это часть, в которой он должен конвертироваться в List<String>. Я не мог найти способ конвертировать Foo в List в этой части.
Другой подход, который приводит к Map<String, Map<String, List<Foo>>>:
Map<Object, Map<Object, List<Foo>>> testMap = ventures.stream().collect(Collectors.groupingBy(e -> e.getAreaName(),
Collectors.groupingBy(e -> e.getObjectName(), Collectors.toList())));
Что мне нужно изменить, чтобы получать Map<String, Map<String, List<String>>> от List<Foo>?




Чтобы получить List другого типа, чем тип элементов Stream, вы должны связать сборщик Collectors.mapping с groupingBy:
Map<String, Map<String, List<String>>> testMap =
foos.stream()
.collect(Collectors.groupingBy(Foo::getAreaName,
Collectors.groupingBy(Foo::getObjectName,
Collectors.mapping(Foo::getLineName,
Collectors.toList()))));
Большое тебе спасибо. Не могу поверить, что не видел метода
Collectors::mapping!