Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Sortovani podle abecedy ArrayList obsahujici Objects

Aktivity
Avatar
Petr
Člen
Avatar
Petr:30.3.2015 14:39

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:30.3.2015 14:46

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:30.3.2015 15:01

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
Tvůrce
Avatar
Odpovídá na Petr
Atrament:30.3.2015 20:03

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:30.3.2015 20:19

Nikdy jsem to nedelal. Jak se to dela?

 
Nahoru Odpovědět
30.3.2015 20:19
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Petr
Jan Vargovský:30.3.2015 20:21

Koukni na první post...

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

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
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Petr
Jan Vargovský:30.3.2015 21:14

To je jedno, je to pořád kolekce.

http://stackoverflow.com/…-by-property

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

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:30.3.2015 21:59

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:30.3.2015 23:02

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:30.3.2015 23:31

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.3.2015 23:31
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Petr
Člen
Avatar
Petr:30.3.2015 23:34

Diky uz na tom pracuji.

 
Nahoru Odpovědět
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.