[英]Combining java objects in an arraylist
所以我有一个LeaderBoard对象的临时数组列表(如下所示),我想将所有具有相同游戏名称的gamertag组合在一起,形成一个新的arraylist。 我将如何去做呢?
LeaderBoard [win=0, lose=1, gameName=QUFI, gamerTag=Ithroeann, platform=IO],
LeaderBoard [win=1, lose=0, gameName=QUFI, gamerTag=Ithroeann, platform=IO],
LeaderBoard [win=1, lose=0, gameName=CODE, gamerTag=Cirronith, platform=PS],
LeaderBoard [win=1, lose=0, gameName=CODE, gamerTag=Cirronith, platform=PS],
LeaderBoard [win=1, lose=0, gameName=QUFI, gamerTag=Deathstar, platform=IO],
LeaderBoard [win=1, lose=0, gameName=QUFI, gamerTag=Deathstar, platform=IO],
LeaderBoard [win=0, lose=1, gameName=QUFI, gamerTag=Deathstar, platform=IO],
LeaderBoard [win=0, lose=1, gameName=CODE, gamerTag=Mazzzap, platform=AN],
LeaderBoard [win=0, lose=1, gameName=NUPI, gamerTag=Mazzzap, platform=AN],
LeaderBoard [win=1, lose=0, gameName=QUFI, gamerTag=Mazzzap, platform=AN],
LeaderBoard [win=1, lose=0, gameName=QUFI, gamerTag=Redstripe, platform=PC],
LeaderBoard [win=0, lose=1, gameName=CODE, gamerTag=Redstripe, platform=PC],
LeaderBoard [win=1, lose=0, gameName=NUPI, gamerTag=Redstripe, platform=PC],
LeaderBoard [win=1, lose=0, gameName=CODE, gamerTag=Redstripe, platform=PC],
LeaderBoard [win=1, lose=0, gameName=QUFI, gamerTag=Crayonbreath, platform=PS],
LeaderBoard [win=1, lose=0, gameName=CODE, gamerTag=Quinesia, platform=XB],
LeaderBoard [win=1, lose=0, gameName=NUPI, gamerTag=Quinesia, platform=XB],
LeaderBoard [win=0, lose=1, gameName=QUFI, gamerTag=VolcanoBrawler, platform=PC],
LeaderBoard [win=0, lose=1, gameName=NUPI, gamerTag=VolcanoBrawler, platform=PC],
LeaderBoard [win=0, lose=1, gameName=NUPI, gamerTag=VolcanoBrawler, platform=PC],
LeaderBoard [win=0, lose=1, gameName=CODE, gamerTag=VolcanoBrawler, platform=PC],
LeaderBoard [win=0, lose=1, gameName=QUFI, gamerTag=CastleRock, platform=XB],
LeaderBoard [win=1, lose=0, gameName=NUPI, gamerTag=TorpedoBear, platform=PC],
LeaderBoard [win=1, lose=0, gameName=NUPI, gamerTag=GreenPanda, platform=AN],
LeaderBoard [win=0, lose=1, gameName=NUPI, gamerTag=GreenPanda, platform=AN]]
变成:
LeaderBoard [win=1, lose=1, gameName=QUFI, gamerTag=Ithroeann, platform=IO]
LeaderBoard [win=2, lose=0, gameName=CODE, gamerTag=Cirronith, platform=PS]
等等...
我不知道该怎么做。
我可以从一些伪代码开始吗?
// create an empty output array list
// for each element in the input array list
// attempt to add it to the output
// if the output already contains an element for this gamer tag, game name, etc
// update that element, adding to the win/loss count
// else
// add a new record with this win/loss count
EDIT1:好的,稍微扩展一下:
ArrayList<LeaderBoard> output = new ArrayList<LeaderBoard>();
:outer
for (LeaderBoard i : input) {
for (LeaderBoard o : output) {
if (i.gameName.equals(o.gameName)
&& i.gamerTag.equals(o.gamerTag)
&& i.platform.equals(o.platform)) {
o.win += i.win;
o.lose += i.lose;
break outer;
}
}
output.add(i);
}
return output;
EDIT2:如果您不想使用带标签的中断:
ArrayList<LeaderBoard> output = new ArrayList<LeaderBoard>();
for (LeaderBoard i : input) {
boolean shouldAdd = true;
for (LeaderBoard o : output) {
if (i.gameName.equals(o.gameName)
&& i.gamerTag.equals(o.gamerTag)
&& i.platform.equals(o.platform)) {
o.win += i.win;
o.lose += i.lose;
shouldAdd = false;
break;
}
}
if (shouldAdd) {
output.add(i);
}
}
return output;
您可以按照Luke的建议手动进行操作(很好的答案,+ 1)。
或者,您可以创建一个LeaderBoard对象的HashMap,其键为gamerTag,其值为当前的LeaderBoard对象。
普通的HashMaps每个键只允许一个值,这将使它们非常快速地查找并且易于更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.