Řazení ArrayListu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Řazení ArrayListu – Java – Fórum – Programujte.comŘazení ArrayListu – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Qwerty
~ Anonymní uživatel
15 příspěvků
22. 7. 2009   #1
-
0
-

Ve třídě Album.java máme nadefinován objekt public Album(String nazev,int cislo) (včetně všech getrů a setrů, přidávání, ukládání vypisování funguje).

V hlavní třídě je (krom jiného:)



private void seradDleAlb(){
List<Album> seznam = new ArrayList<Album>();
for (Album k : databaze.getAlbum()) {
seznam.add(k);
}
Collections.sort(seznam);
vypisAlba(seznam);
}


a samozřejmě to nefunguje... Dočetl jsem se, že asi budu muset udělat vlastní komparátor, ale to jsem nikdy nezkoušel... Nejde to nějak obejít?
Díky za rady...

Nahlásit jako SPAM
IP: 84.16.103.–
Reklama
Reklama
Foowie0
Newbie
23. 7. 2009   #2
-
0
-

Nejjednodušší je udělat ten komarátor, resp zařídit, aby daná třída implementovala rozhraní Comparable<Album> s metodou compareTo(Album a).

class Album implements Comparable<Album> {

protected String nazev;
public Album(String nazev) {
this.nazev = nazev;
}
public String getNazev() {
return nazev;
}
public void setNazev(String nazev) {
this.nazev = nazev;
}
public int compareTo(Album a) {
// Navrať záporné číslo, nulu, kladné číslo pokud je tento objekt menší, stejný nebo větší než "a"
return getNazev().compareTo(a.getNazev());
}

@Override
public String toString() {
return nazev;
}
}

public class Main {
public static void main(String[] args) {
List<Album> seznam = new ArrayList<Album>();
seznam.add(new Album("X - První album"));
seznam.add(new Album("Z - Druhé album"));
seznam.add(new Album("A - Třetí album"));
Collections.sort(seznam);
for(Album a : seznam)
System.out.println(a);
}
}

Nahlásit jako SPAM
IP: 62.129.36.–
michalc0
Duch
23. 7. 2009   #3
-
0
-

Nebude ti to fungovat, musíš použít SortedSet:



public class Main {
public static void main(String[] args) {
SortedSet<Album> seznam = new TreeSet<Album>();
seznam.add(new Album("X - První album"));
seznam.add(new Album("Z - Druhé album"));
seznam.add(new Album("A - Třetí album"));
for(Album a : seznam)
System.out.println(a);
}

}

Nahlásit jako SPAM
IP: 62.77.72.–
Qwerty
~ Anonymní uživatel
15 příspěvků
25. 7. 2009   #4
-
0
-

Nakonec ten komparátor nevypadá tak hrozně :) Už to funguje, díky všem!

Nahlásit jako SPAM
IP: 84.16.103.–
Foowie0
Newbie
26. 7. 2009   #5
-
0
-

michalc napsal:
Nebude ti to fungovat, musíš použít SortedSet:


public class Main {
public static void main(String[] args) {
SortedSet<Album> seznam = new TreeSet<Album>();
seznam.add(new Album("X - První album"));
seznam.add(new Album("Z - Druhé album"));
seznam.add(new Album("A - Třetí album"));
for(Album a : seznam)
System.out.println(a);
}

}


Proč by to s ArrayListem nemělo fungovat?

Nahlásit jako SPAM
IP: 62.129.36.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý