Játékosok sorrendbe állítása...Android

Játékosok sorrendbe állítása...Android
2020-01-15T11:01:57+01:00
2020-01-17T08:05:26+01:00
2022-10-15T21:16:12+02:00
Csatlós Bence
Sziasztok!
Van egy szerintem annyira nem nehéz problémám, viszont nem jutt eszembe megoldás rá...
Van kér ArrayList-em az egyik  ArrayList<Teams>, a másik pedig ArrayList<Players>
A Teams tartralmazza az alábbi tulajdonásogat:
- int teamID (0-tól kezdődik az indexelés)
- String teamName (Opcionális)
A Players tartalmazza az alábbi tulajdnságokat:
- int playerID (0-tól kezdődik az indexelés)
- int teamID (Megegyezik a Teams osztály teamID-val)
- String playerName (Opcionális)

Az a kérdésem, hogy szerintetek hogyan tudnák egy előre felállított sorrendet készíteni a playerID alapján, hogy mindnig a következő csapat, és a követekező játékos következzen a csapaton belül. (Mint az Activity társasjátékban...)
pl.: (1. csapat, 1. játékosa),(2.csapat 1. játékosa),(1.csapat 2. játékosa),(2.csapat 2.játékosa) stb...
Üdv, Bence
Mutasd a teljes hozzászólást!
Lehet, nem mélyedtem igazán bele a feladat részleteibe... csak egy megoldási technikát javasoltam.

Ha már itt tartunk, én egészen biztosan nem ID alapján rendezgetnék... nálam minden csapatnak és minden játékosnak lenne 1 sorszáma, a 2 listát (csapatok, játékosok) pedig külön-külön rendezném a sorszám memberek szerint (gondolom úgyis először csapat választódik, azután pedig játékos a kiválasztott csapatból).
Mutasd a teljes hozzászólást!

  • A Players osztályod neve megtévesztő a többesszám miatt, gondolom 1 példány pontosan 1 játékos adatait tartalmazza.
    Mindegy, a "tipikus" javás megoldás a Collections.sort() lesz, ennek odaadhatod paraméterül a játékosokat tartalmazó ArrayList-et.
    Ahhoz, hogy ez jól működjön, a Player osztályodnak implementálnia kell a Comparable interface-t, ezzel együtt meg kell valósítania a compareTo() metódust.
    Ebben a compareTo()-ban szépen kifejted, hogy 2 játékos (a this és a paraméterül kapott másik) hogyan viszonyul egymáshoz rendezés szempontjából (nagyobb/kisebb/egyenlő...).
    Ez nem lesz túl bonyolult, ugye teamid majd playerid szerint kell rendezni.

    Szóval ezekre keress szakirodalmat: java collections sort comparable
    Mutasd a teljes hozzászólást!
  • comparatornál kicsit trükkösnek hangzik, hogy alternáljon a csapat alapján. én lehet inkább két listába raknám csapat alapján a játékosokat, aztán egy közösbe összefésülném.
    Mutasd a teljes hozzászólást!
  • Lehet, nem mélyedtem igazán bele a feladat részleteibe... csak egy megoldási technikát javasoltam.

    Ha már itt tartunk, én egészen biztosan nem ID alapján rendezgetnék... nálam minden csapatnak és minden játékosnak lenne 1 sorszáma, a 2 listát (csapatok, játékosok) pedig külön-külön rendezném a sorszám memberek szerint (gondolom úgyis először csapat választódik, azután pedig játékos a kiválasztott csapatból).
    Mutasd a teljes hozzászólást!
  • Ha dolgoztál már bittérképekkel, akkor az x+y*width talán ismerősen hangzik. Itt is rendelhetsz ilyen lineáris pozíciót a játékosokhoz, teamId+playerId*teams formában.
    Az említett Collections.sort és egy lambda használatával így nézne ki
    Collections.sort(players, (a,b)->a.teamId-b.teamId+teams.size()*(a.playerId-b.playerId));
    Teszt: Ideone.com
    Mutasd a teljes hozzászólást!
  • Ha már Java 8 és lambda, van olvashatóbb alternatíva is 

    players.sort(Comparator.comparing(Players::getPlayerId).thenComparing(Players::getTeamId));
    Itt feltételeztem, hogy a mezőknek van elérhető getter metódusa. Ha közvetlen a mezőt kell elérni, akkor muszáj lambda kifejezéssel kiírni a hozzáférést, de talán még úgy is olvashatóbb, mint a matekozós megoldás.
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszokat mindenkinek. Ezzel már tudok mit kezdeni, és próbálkozni.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd