Diskuze: Sortovani podle abecedy ArrayList obsahujici Objects

Java Java Sortovani podle abecedy ArrayList obsahujici Objects

Avatar
Petr
Člen
Avatar
Petr:

Zdravim Vsechny. Resim takovou vyzvu kdy muj ArrayList<Libra­ryItem> itemsListLItem obsahuje Object. LibraryItem je superclass a pod ni je CD a DVD. To CD a DVD obsahuje
informace jako title nebo libraryUserID. Ja bych potreboval sortovat informace obsazene v title podle abecedy. Dostat se k title jde napriklad takto:

for ( int i = 0; i < itemsListLItem­.size(); i++)
{
itemsListLItem­.get(i).getTi­tle();
}
Lamu si hlavu jak data v title vysortovat podle abecedy a pak to vypsat pomoci printDetails() . Muj printDetails jde nejprve pres nejnizsi patro a pak nahoru pres vsechny superclass.

Diky moc.

 
Odpovědět 30.3.2015 14:39
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Petr
MrPabloz:

Skus implementovat Comparable<T> rozhraní.
Jak na to máš např. tady: http://stackoverflow.com/…s-comparable

pak tedy stačí zavolat Collections.sor­t(list); a pak stačí jen vypsat ve foreach např. :)

Editováno 30.3.2015 14:47
Nahoru Odpovědět 30.3.2015 14:46
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Petr
Člen
Avatar
Odpovídá na MrPabloz
Petr:

Diky za odpoved. Pokud jsem se spravne dival tak na tech strankach bud sortuji cely ArrayList bezohledu co obsahuje nebo ma jen jeden object takze jsem zatim nic nenasel . Ja mam object CD ktery ma supertridu(ab­stract) a ta supertrida ma dalsi supertridu a ta obsahuje tu informaci o title kterou potrebuji vysortovat. Kdyz budu sortovat cely ArrayList v te nejvyssi supertride tak me to maximalne ukaze dve subclasses ktere jsou ovsem supertridy pro CD nebo Knihy etc.

 
Nahoru Odpovědět 30.3.2015 15:01
Avatar
Atrament
Člen
Avatar
Odpovídá na Petr
Atrament:

To Comparable implementuj v LibraryItem a pak ti půjde provést Collections.sor­t(itemsListItem).

 
Nahoru Odpovědět 30.3.2015 20:03
Avatar
Petr
Člen
Avatar
Odpovídá na Atrament
Petr:

Nikdy jsem to nedelal. Jak se to dela?

 
Nahoru Odpovědět 30.3.2015 20:19
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Petr
Jan Vargovský:

Koukni na první post...

 
Nahoru Odpovědět 30.3.2015 20:21
Avatar
Petr
Člen
Avatar
Odpovídá na Jan Vargovský
Petr:

Jak rikam ja to nikdy nedelal a pokud jsem si vsiml tak oni davaji Array do comparable a ne ArrayList.

 
Nahoru Odpovědět 30.3.2015 21:05
Avatar
Petr
Člen
Avatar
Odpovídá na Jan Vargovský
Petr:

I Give Up, Kdybych vedel jak to implementovat nebo udelat, tak se neptam tady ale podivam se na stejne odkazy na google. Kombinace veci co to tam vidim jsem nikdy nedelal takze mi to nic nerika. Nikdy jsem nic nesortoval podle fields ani v ArrayList . Prozatim jsem nikdy nepouzil ani comparable ani Collections.

Kazdopadne diky za vas cas.

 
Nahoru Odpovědět 30.3.2015 21:50
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Petr
MrPabloz:

Jde to udělat jednoduše. Tu třdu kterou chceš sortovat, tak implementuješ u ní rozhraní comparable<ná­zev_třídy>. To tě donutí implementovat funkci z rozhraní compareTo(nazev_tri­dy other). Poté si vyplníš podle čeho chceš porovnávat v dané funkci dva objekty dané třídy. Tedy něco ve smyslu

public class Trida implements comparable<Trida> {
    public int x;
    public int compareTo(Trida other) {
    if(x > other.x)
        return 1;
    else if(x == other.x)
        return 0;
    else
        return -1;
    }
}

To je vše co musíš udělat. protože tvoje třída dědí z jiné, dostaneš se k Title bud jako třídní proměná nebo pomocí gettru (podle private/protected), no a uděláš to tak samo jak tady ten vzor, jen podle toho, jak chceš dva Title porovnat. To je vše :)

Nahoru Odpovědět 30.3.2015 21:59
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Petr
Člen
Avatar
Odpovídá na MrPabloz
Petr:

Ja myslel, ze musim pouzit nejaky loop pro ArrayList kde ty informace jsou ulozene. Hlavni take je ze ja portebuji sortovat String napr
title = "Cesta z mesta"
title = "A ja do evropy" atd ktere jsou s dalsimi fields ulozeny v tom arrayList
takze vysledek by byl podle abecedy title = "A ja do evropy" a pak title = "Cesta z mesta"

 
Nahoru Odpovědět 30.3.2015 23:02
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Petr
MrPabloz:

Pokud potřebuješ nějaký loop není nic jednoduššího než použít nějaký třídící algoritmus, např. bubblesort http://www.algoritmy.net/…/Bubble-sort nebo jiný algoritmus. Pokud stačí čistě jen seřadit, využij toho compareTo a pošli to do metody Collections.sort(), která automaticky provede loop nad kolekcí a seřadí ji :)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 30.3.2015 23:31
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Petr
Člen
Avatar
Petr:

Diky uz na tom pracuji.

 
Nahoru Odpovědět  +1 30.3.2015 23:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.