2015-06-25 6 views
-1

Итак, у меня есть временный arraylist объектов LeaderBoard (см. Ниже), и я хочу объединить все игры с одним и тем же именем игры вместе с новым arraylist. Как мне это сделать?Сочетание java-объектов в 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] 

и т.д ...

Я не могу понять, как это сделать.

+0

Я не понимаю, как вы получили этот новый «Список» – Incognito

+0

Простите, что вы имеете в виду новый список? – Daniel

+0

Часть «в:» с двумя элементами – Incognito

ответ

1

Могу ли я начать с некоторого псевдокода?

// 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; 
+0

не знаю, как я собирался обновить tho – Daniel

+0

Получить объект, добавить к номерам. Помните! – Luke

+0

Извините, но что же: внешний средний? – Daniel

1

Вы можете сделать это вручную, как Лука предложил (хороший ответ, +1).

Или вы можете создать объекты HashMap of LeaderBoard с ключом gamerTag и значением текущего объекта LeaderBoard.

Обычные HashMaps допускают только одно значение для каждого ключа, и это сделает их очень быстрыми в поиске и легко обновит.

+0

Остановить его :) Чтобы расширить это , логика подобна; на этот раз должен быть выходной HashMap (а не ArrayList), а для каждого входа - проверить, существует ли он на выходе, и соответственно обновить/добавить. Для этого вам нужно будет проверить документацию для HashMap. – Luke

+1

http://google.com/search?q=java+hashmap+api –

+0

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html; P – Luke

Смежные вопросы