分组和计数比较两个对象数组 Java
Group by and counting comparing two arrays of objects Java
我有 3 个 classes:Agency
、Team
和 Agent
。 Agent
属于 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()));
我有 3 个 classes:Agency
、Team
和 Agent
。 Agent
属于 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()));