我有一个A类的对象列表:
List<A> list;
class A {
String name;
String lastname;
//Getter and Setter methods
}
我想将此列表转换为从名称到一组姓氏的映射:
Map<String, Set<String>> map;
例如,对于以下列表:
约翰·阿彻,约翰·玛瑙,汤姆·基南宁,汤姆·巴伦,辛迪·金
地图将是:
约翰-> {Archer,Agate},汤姆-> {Keinanen,Barren},辛迪-> {King}
我尝试了以下代码,但它返回了从名称到A类对象的映射:
list.stream.collect(groupingBy(A::getFirstName, toSet()));
最佳答案
Map< String, Set<String>> map = list.stream()
.collect(
Collectors.groupingBy(
A::getFirstName, Collectors.mapping(
A::getLastName, Collectors.toSet())));
您在正确的轨道上需要使用:
Collectors.groupingBy
按firstName
分组。然后使用像
Collectors.mappping
这样的下游收集器作为Collectors.groupingBy
的第二个参数来映射到lastName
。然后通过调用
Set<String>
最终将其收集在Collectors.toSet
中: