按组计数比较两个对象数组Java

3
我有三个类:Agency(机构),Team(团队)和Agent(代理人)。Agent属于一个 Team,而 Team 又属于一个 Agency。
我需要生成一份报告,统计每个 Agency 拥有多少个 Agent。 我没有数据库,只有以下数据的 ArrayList:
List<Agent> agents
List<Team> teams
List<Agency> agencies

Agent类上,我有一个方法getTeam(),它又调用了Team类的方法getAgency()
我想要实现的是:
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();
            }
        }
    }
}

但我不知道如何为每个机构单独计数。

所以我尝试了:

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

但是我无法从Agent中获取机构,因为我需要使用getTeam().getAgency(),而这个Map不允许我这样做。

总结一下:

我有机构:A、B、C。

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

我需要展示:机构A:2名代理/机构B:1名代理/机构C:0

请问有人可以帮我吗?

1个回答

2

请问如何将值作为字符串返回?如果我想要显示每个机构的“机构x有y个代理商” - asr
我得到了空指针异常,因为并非所有的代理人都有一个团队。这不是一个循环,我如何过滤掉 agent.getTeam 不为空的情况? - asr
1
@asr for(Map.Entry<String, Long> entry : agentsAtAgency) { System.out.println("机构" + entry.getKey() + "有" + entry.getValue() + "名代理商"); } - Eran
我已经尝试过了。在for循环中,我从agentsAtAgency得到了一个错误:“只能迭代数组或java.lang.Iterable的实例”。我在这里搜索了一下,你漏掉了在agentsAtAgency之后加上“.entrySet()”。对不起,我有这么多疑问,这是我第一次使用Map。你帮了我很多。非常感谢! - asr
3
agentsAtAgency.forEach((agency, count) -> System.out.println("机构" + agency + "有" + count + "个特工"); - Holger
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接