Guava rendelési szakácskönyv

1. Bemutatkozás

Ez a szakácskönyv szemlélteti hogyan kell használni a guava stílusú Rendezés és összehasonlítókat. Folytatja a szakácskönyv és a példa fókusz formátumot, amelyet az előző, a guavai gyűjteményekről szóló bejegyzésben kezdtem.

2. Szakácskönyv

nullákkal foglalkozik egy gyűjteményben

előbb nullák

List toSort = Tömbök.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsFirst ()); assertThat (toSort.get (0), nullValue ());

nulls utoljára

List toSort = Tömbök.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast ()); assertThat (toSort.get (toSort.size () - 1), nullValue ());

természetes rendezés

List toSort = Tömbök.asList (3, 5, 4, 1, 2); Gyűjtemények.rendezés (toSort, Orderingnatural ()); assertTrue (Rendezés.természetes (). isOrdered (toSort));

2 rendelés láncolása

List toSort = Tömbök.asList (3, 5, 4, 1, 2); Gyűjtemények.sort (toSort, Rendezés.natural (). Reverse ());

megrendelés visszavonása

List toSort = Tömbök.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast (). Reverse ()); assertThat (toSort.get (0), nullValue ());

egyedi sorrend - Húrok hossz szerint

privát osztály A OrderingByLenght kiterjeszti a {@Orride public int összehasonlítás (String s1, String s2) {return Ints.compare (s1.length (), s2.length ()); }} List toSort = Tömbök.asList ("zz", "aa", "b", "ccc"); Rendezés byLength = új OrderingByLenght (); Collections.sort (toSort, byLength); Rendelés várhatóOrder = Rendelés.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (várhatóOrder.isOrdered (toSort))

explicit sorrend ellenőrzése

List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Rendezés byLength = új OrderingByLenght (); Collections.sort (toSort, byLength); Rendelés várhatóOrder = Rendelés.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (várhatóOrder.isOrdered (toSort));

húrrendelés ellenőrzése

List toSort = Tömbök.asList (3, 5, 4, 2, 1, 2); Gyűjtemények.rendezés (toSort, Orderingnatural ()); assertFalse (Rendezés.természetes (). isStrictlyOrdered (toSort));

másodlagos rendelés

List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Rendezés byLength = új OrderingByLenght (); Collections.sort (toSort, byLength.compound (Rendezés.természetes ())); Rendelés várhatóOrder = Rendelés.explicit (Lists.newArrayList ("b", "aa", "zz", "ccc")); assertTrue (várhatóOrder.isOrdered (toSort));

komplex egyedi rendelési példa - láncolással

List toSort = tömbök.asList ("zz", "aa", null, "b", "ccc"); Collections.sort (toSort, új OrderingByLenght (). Reverse (). Összetett (Ordering.natural ()). NullsLast ()); System.out.println (toSort);

rendezés a Sztring reprezentáció

List toSort = Tömbök.asList (1, 2, 11); Gyűjtemények.sort (toSort, Ordering.usingToString ()); Rendelés várhatóOrder = Rendelés.explicit (Lists.newArrayList (1, 11, 2)); assertTrue (várhatóOrder.isOrdered (toSort));

rendezés, majd megkeresés (bináris keresés)

List toSort = Tömbök.asList (1, 2, 11); Gyűjtemények.sort (toSort, Ordering.usingToString ()); int talált = Ordering.usingToString (). binarySearch (toSort, 2); System.out.println (talált);

min / max keresés válogatás nélkül (gyorsabb)

List toSort = Tömbök.asList (2, 1, 11, 100, 8, 14); int talált = Ordering.usingToString (). min (toSort); assertThat (talált, egyenlőTo (1));

a lista rendezett másolatának létrehozása megrendelésből

List toSort = Arrays.asList ("aa", "b", "ccc"); List sortedCopy = új OrderingByLenght (). SortedCopy (toSort); Rendelés várhatóOrder = Rendelés.explicit (Lists.newArrayList ("b", "aa", "ccc")); assertFalse (várhatóOrder.isOrdered (toSort)); assertTrue (várhatóOrder.isOrdered (sortedCopy));

rendezett részleges másolat létrehozása - a legkevesebb elem

List toSort = Tömbök.asList (2, 1, 11, 100, 8, 14); List legkevesebb = Rendezés.természetes (). Legkevesebb (toSort, 3); Várható lista = Lists.newArrayList (1, 2, 8); assertThat (várható, egyenlőTo (legkevesebbOf));

rendelés közvetítőn keresztül Funkció

List toSort = Tömbök.asList (2, 1, 11, 100, 8, 14); Rendelési sorrend = Ordering.natural (). OnResultOf (Functions.toStringFunction ()); List sortedCopy = ordering.sortedCopy (toSort); Várható lista = Lists.newArrayList (1, 100, 11, 14, 2, 8); assertThat (várható, equalTo (sortedCopy));

jegyzet: a rendezési logika először a függvényen keresztül futtatja a számokat - átalakítja őket karakterláncokká -, majd a sorrendben rendezi a természetes sorrendet

3. További guavai szakácskönyvek

A Guava egy átfogó és fantasztikusan hasznos könyvtár - íme néhány további API a szakácskönyv formában:

  • Guava funkcionális szakácskönyv

  • Guava gyűjtemények szakácskönyve

Élvezd.

4. Következtetés

Ennek a kísérleti formátumnak - a szakácskönyvnek - egyértelmű fókusza van - az egyszerűség és a gyorsaság, tehát a legtöbb recept megvan nincs további magyarázat, csak maga a kódpélda.

És mint korábban említettem - ez mint élő dokumentum - új megjegyzéseket és felhasználási eseteket szívesen fogadunk a megjegyzésekben, és folytatom a sajátjaim hozzáadását, amikor összefutok velük.

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