我有一个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.groupingByfirstName分组。
然后使用像Collectors.mappping这样的下游收集器作为Collectors.groupingBy的第二个参数来映射到lastName
然后通过调用Set<String>最终将其收集在Collectors.toSet中:

10-06 09:22