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

时间:2017-11-29 15:19:21

标签: java group-by java-8 counting collectors

我有3个课程:AgencyTeamAgentAgent属于属于Team的{​​{1}}。

我需要做一个报告,计算每个Agency上有多少代理人。 我没有数据库,只有Agency s,包含以下数据:

ArrayList

List<Agent> agents List<Team> teams List<Agency> agencies 班级,我有Agent,其中getTeam()(来自getAgency()班级。)

我试图这样做:

Team

但我不知道如何将每个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而且此地图不允许我这样做。

汇总:

我有代理:A,B,C。

我有代理人:X代理A,Y代理A代理,Z代理B代理。

我需要证明:代理A:2个代理/代理B:1代理/代理C:0

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

你很亲密。在这种情况下,您应该使用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()));