首页 > 解决方案 > 使用 Java 8 按两个字段对对象进行分组

问题描述

我在使用 Java 8 对两个值进行分组时遇到问题。

我的主要问题是对两个字段进行分组,我正确地将一个字段分组,getNameOfCountryOrRegion()但现在我对groupingBy另一个也被调用leagueDTO的字段感兴趣。

Map<String, List<FullCalendarDTO>> result = countryDTOList.stream()
               .collect(Collectors.groupingBy(
                             FullCalendarDTO::getNameOfCountryOrRegion));

以及以下课程:

public class FullCalendarDTO  {
    private long id;
    private TeamDTO localTeam;
    private TeamDTO visitorTeam;
    private LocationDTO location;   
    private String leagueDTO;       
    private String timeStamp;
    private String nameOfCountryOrRegion;
}

结果将按 和nameOfCountryOrRegion分组leagueDTO

标签: javacollectionsjava-8java-streamgrouping

解决方案


downstream将收集器传递给groupingBy将起到作用:

countryDTOList.stream()
              .collect(groupingBy(FullCalendarDTO::getNameOfCountryOrRegion,
                       groupingBy(FullCalendarDTO::getLeagueDTO)));

上面的代码片段会将您的FullCalendarDTO对象nameOfCountryOrRegion分组,然后每个组将按leagueDTO.

所以返回的集合看起来像Map<String, Map<String, List<FullCalendarDTO>>>.


推荐阅读