分组和计数比较两个对象数组 Java

Group by and counting comparing two arrays of objects Java

我有 3 个 classes:AgencyTeamAgentAgent 属于 Team 属于 Agency.

我需要做一份报告,统计我在每个 Agency 上有多少代理人。 我没有数据库,只有 ArrayList 具有以下数据:

List<Agent> agents
List<Team> teams
List<Agency> agencies

Agent class 上,我有 getTeam(),其中有 getAgency()(来自 Team class)。

我正在尝试做:

for (Agency ag : agencies) {
    for (Agent a : agents) {
        if (a.getTeam() != null) {
            if (a.getTeam().getAgency() == ag) {
               teste = "Agency from agent" + a.getTeam().getAgency().getCode() + "Agency from agency" + ag.getCode();
            }
        }
    }
}

但我不知道如何计算每个Agency

所以我尝试了:

Map<String, Long> agentsAtAgency = 
    agents.stream()
          .collect(Collectors.groupingBy(Agent::getTeam, Collectors.counting()));

但是我无法从 Agent 那里获得代理商,因为我需要 getTeam().getAgency() 而这张地图不允许我这样做。

总结:

我有代理商:A,B,C。

我有代理人:X 与代理机构 A 相关,Y 与代理机构 A 相关,Z 与代理机构 B 相关。

我需要显示:代理商A:2个代理商/代理商B:1个代理商/代理商C:0

有人可以帮我吗?

你很接近。在这种情况下,您应该使用 lambda 表达式而不是方法引用。

这将允许您按 a -> a.getTeam().getAgency()(或 Agency 中具有 String 类型的某些 属性 进行分组,因为您的输出是 Map<String, Long> ):

Map<String, Long> agentsAtAgency = 
    agents.stream()
          .filter(a -> a.getTeam() != null)
          .collect(Collectors.groupingBy(a -> a.getTeam().getAgency().getName(),
                                         Collectors.counting()));