Útmutató Guava rendezéséhez

1. Áttekintés

Ebben a cikkben megnézzük Rendelés osztály a guavai könyvtárból.

A Rendelés osztály hajtja végre a Összehasonlító interfészt, és hasznos folyékony API-t ad nekünk az összehasonlítók létrehozásához és láncolásához.

Gyors bemutatóként érdemes megnézni az újat is Comparator.comparing () API - amely hasonló funkciókat biztosít; itt egy praktikus példa az API használatával.

2. Teremtés Rendelés

Rendelés rendelkezik egy hasznos készítő metódussal, amely egy megfelelő példányt ad vissza, amelyet az a-ban lehet használni fajta() módszer gyűjteményeken vagy bárhol máshol, ahol a Összehasonlító szükség van rá.

Természetes rendelési példányt létrehozhatunk végrehajtási módszerrel természetes():

Egész számok = tömbök. AsList (3, 2, 1); integers.sort (Rendezés.természetes ()); assertEquals (Tömbök.asList (1,2,3), egész számok);

Tegyük fel, hogy van egy gyűjteményünk Személy tárgyak:

osztály Személy {privát karakterlánc neve; magán Egész életkor; // szabványos kivitelezők, szerelők}

És az ilyen objektumok listáját szeretnénk rendezni kor terület. Megalkothatjuk a szokásunkat Rendelés hogy pontosan ezt fogja tenni kiterjesztésével:

Személyek felsorolása = Arrays.asList (új személy ("Michael", 10), új személy ("Alice", 3)); Ordering orderingByAge = new Ordering () {@Orride public int összehasonlítás (p1 személy, p2 személy) {return Ints.compare (p1.age, p2.age); }}; people.sort (orderingByAge); assertEquals (Arrays.asList (új személy ("Alice", 3), új személy ("Michael", 10)), személyek);

Akkor használhatjuk a mi orderingByAge és adja át neki fajta() módszer.

3. Láncolás Rendelések

Ennek az osztálynak egyik hasznos tulajdonsága, hogy különböző módokat tudunk láncolni Rendelés. Tegyük fel, hogy van egy személygyűjteményünk, és azt szeretnénk rendezni kor mező és van nulla kor mező értékek a lista elején:

Személyek felsorolása = Arrays.asList (új személy ("Michael", 10), új személy ("Alice", 3), új személy ("Thomas", null)); Sorrend rendelés = Rendelés .natural () .nullsFirst () .onResultOf (új Funkció () {@Override public Comparable Apply (Személy személy) {return személy.age;}}); személyek.rendezés (rendelés); assertEquals (Arrays.asList (új személy ("Thomas", null), új személy ("Alice", 3), új személy ("Michael", 10)), személyek);

A fontos dolog, amit itt észre kell venni, az a sorrend, amelyben az adott Rendeléss végrehajtásra kerülnek - a megrendelés jobbról balra történik. Tehát először is onResultOf () végrehajtásra kerül, és ez a módszer kivonja az összehasonlítani kívánt mezőt.

Azután, nullFirst () az összehasonlító végrehajtásra kerül. Emiatt az így kapott válogatott gyűjteménynek lesz egy Személy objektum, amelynek van egy nulla mint egy kor mezőt a lista elején.

A válogatás végén kor a mezőket természetes sorrendben hasonlítják össze, a módszerrel megadva természetes().

4. Következtetés

Ebben a cikkben megnéztük Rendelés osztály a guavai könyvtárból, amely lehetővé teszi számunkra, hogy folyékonyabban és elegánsabban alkossunk Összehasonlítós. Megalkottuk a szokásunkat Rendelés, előre definiáltakat használtunk az API-ból, és láncoltuk őket, hogy minél több egyedi rendet érjünk el.

Ezeknek a példáknak és kódrészleteknek a megvalósítása megtalálható a GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.