Forum » Programiranje » [Java] Urejanje objektov v tabeli po več atributih
[Java] Urejanje objektov v tabeli po več atributih
SkIDiver ::
Imam recimo tabelo katera ima v vsakem polju en objekt. Objekt pa vsebuje več atributov, ki so različnih tipov.
Primer: Objekt Oseba1 ima atribute; Miha Kovac 26 let. Sedaj imam še en objekt Oseba2 z atributi; Janez Kovac 25 let. Sedaj pa zelim ta dva objekta urediti padajoce ali narascujoce. Recimo, da urejam naraščujoče po priimku, ki je pri obeh objektih drugi atribut. Zadeva se posortira ampak ne ravno najbolje. Prvi bo namreč izpisan Miha Kovac 26 let in drugi Janez Kovac 25 let kar je napačno zamoje sortirne zahteve. Sortiranje po priimku sicer štima ampak sedajbi želel, da zadeva posortira še po atributu ki sledi, ali pa po atributu pred priimkom torej imenom. Kako bi to storil? Stvar bi rad imel prioritetno. V mojem primeru zahtevam sortiranje po priimku. Nato pa bi se zadeva uredila še po vrstnem redu po imenu in starosti. Torej primarno se uredi po priimku nato pa še po atributu, ki je prioritetno vnaprej določen vendar tu ne zanemari ureditve po priimku!
Primer: Objekt Oseba1 ima atribute; Miha Kovac 26 let. Sedaj imam še en objekt Oseba2 z atributi; Janez Kovac 25 let. Sedaj pa zelim ta dva objekta urediti padajoce ali narascujoce. Recimo, da urejam naraščujoče po priimku, ki je pri obeh objektih drugi atribut. Zadeva se posortira ampak ne ravno najbolje. Prvi bo namreč izpisan Miha Kovac 26 let in drugi Janez Kovac 25 let kar je napačno zamoje sortirne zahteve. Sortiranje po priimku sicer štima ampak sedajbi želel, da zadeva posortira še po atributu ki sledi, ali pa po atributu pred priimkom torej imenom. Kako bi to storil? Stvar bi rad imel prioritetno. V mojem primeru zahtevam sortiranje po priimku. Nato pa bi se zadeva uredila še po vrstnem redu po imenu in starosti. Torej primarno se uredi po priimku nato pa še po atributu, ki je prioritetno vnaprej določen vendar tu ne zanemari ureditve po priimku!
kopernik ::
Tabelo ? Misliš Hashtable ? Ali polje ?
No, kakorkoli. Urejanje dosežeš z Arrays.sort ali Collections.sort. Pogoje za urejanje pa določiš kar na objektih z vmesnikom Comparable. Evo primerček :
Override metod equals in hashcode je dobro vedno narediti, še posebej, če objekte uporabljaš kot ključe v hahshmapi.
No, kakorkoli. Urejanje dosežeš z Arrays.sort ali Collections.sort. Pogoje za urejanje pa določiš kar na objektih z vmesnikom Comparable. Evo primerček :
class Oseba implements Comparable { private String ime; private String priimek; private int starost; public Oseba(String ime, String priimek, int starost) { this.ime = ime; this.priimek = priimek; this.starost = starost; } //vrne 0, ce sta objekta enaka; //>0, ce je ta objekt vecji od drugega //<0, ce je ta objekt manjsi od drugega public int compareTo(Object o) { if(o instanceof Oseba) { Oseba other = (Oseba) o; //sortiramo najprej po starosti, nato po priimku, nato po imenu if(other.starost == this. starost) { int i = other.priimek.compareTo(this.priimek); if(i == 0) { return other.ime.compareTo(this.ime); } else { return i; } } else { return other.starost - this.starost; } } else { throw new IllegalArgumentException( "Object 'o' is of wrong type :" + o.getClass().getName()); } } public boolean equals(Object o) { if(o instanceof Oseba) { Oseba other = (Oseba) o; return (other.starost == this. starost) && other.priimek.equals(this.priimek) && other.ime.equals(this.ime); } else { throw new IllegalArgumentException( "Object 'o' is of wrong type :" + o.getClass().getName()); } } public int hashCode() { return (this.priimek + this.ime + this.starost).hashCode(); } }
Override metod equals in hashcode je dobro vedno narediti, še posebej, če objekte uporabljaš kot ključe v hahshmapi.
kopernik ::
Še to ... če objektov ne moreš popravljati, implementiraj vmesnik Comparator, ki ga lahko nato poturiš raznim sortirnim metodam.
ČE želiš pravo sortiranje (glede na slovenski jezik ... vsak jezik ima namreč svoja pravila za sortiranje) pa uporabi razred Collator oz. RuleBasedCollator (podaš mu pravila za sortiranje).
ČE želiš pravo sortiranje (glede na slovenski jezik ... vsak jezik ima namreč svoja pravila za sortiranje) pa uporabi razred Collator oz. RuleBasedCollator (podaš mu pravila za sortiranje).
Zgodovina sprememb…
- spremenil: kopernik ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] Delo z okni - urejanje osebeOddelek: Programiranje | 984 (856) | darkolord |
» | [C#] DeserializacijaOddelek: Programiranje | 1860 (1463) | Cvenemir |
» | Povezani seznamOddelek: Programiranje | 2094 (1691) | pohano |
» | [Java] Sortiranje objektovOddelek: Programiranje | 2847 (2847) | tjaz24 |
» | [Java][Naloga] Seznam študentov, majčken problemOddelek: Programiranje | 2315 (2002) | VASkO |