Mam następującą klasę:
public class Foo {
private String areaName;
private String objectName;
private String lineName;
}
Teraz chcę przekonwertować List<Foo>
na Map<String, Map<String, List<String>>>
. Znalazłem tę odpowiedź, która pomogła mi opracować następujący kod:
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())))));
Jedyny problem z tym kodem to część, w której powinien zostać przekonwertowany na List<String>
. Nie mogłem znaleźć sposobu na przekonwertowanie Foo
na List
w tej części.
Inne podejście, które skutkuje 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())));
Co muszę zmienić, aby otrzymać Map<String, Map<String, List<String>>>
od List<Foo>
?
1 odpowiedź
Aby uzyskać List
innego typu niż typ elementów Stream
, powinieneś połączyć kolektor Collectors.mapping
z 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()))));
Podobne pytania
Powiązane pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].