私には3つのクラスAgency
がTeam
ありAgent
ます。アンはAgent
に属しているTeam
に属していますAgency
。
それぞれに何人のエージェントがいるかを報告する必要がありますAgency
。私はデータベースを持っていません、ただ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
私が必要getTeam().getAgency()
としていることと、このマップではそれができないためです。
要約:
私には代理店があります:A、B、C。
エージェントがいます:Xは代理店Aに、Yは代理店Aに、Zは代理店Bに関連しています。
表示する必要があります:エージェンシーA:2エージェント/エージェンシーB:1エージェント/エージェンシーC:0
誰かが私を助けてくれますか?
あなたは近くにいた。この場合、メソッド参照の代わりにラムダ式を使用する必要があります。
これにより、a -> a.getTeam().getAgency()
(または出力がaであるため、型を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()));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加