Objednávka kuchárskej knihy Guava
1. Úvod
Táto kuchárska kniha ilustruje ako používať objednávanie a komparátory v štýle Guava. Pokračuje formát kuchárskej knihy a ukážky zamerania, ktorý som začal v predchádzajúcom príspevku o zbierkach Guava.
2. Kuchárska kniha
zaobchádzanie s nulovými hodnotami v zbierke
najskôr null
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsFirst ()); assertThat (toSort.get (0), nullValue ());
nuly posledné
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast ()); assertThat (toSort.get (toSort.size () - 1), nullValue ());
prirodzené usporiadanie
List toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertTrue (Ordering.natural (). isOrdered (toSort));
reťazenie 2 objednávok
List toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural (). Reverse ());
obrátiť objednávanie
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast (). Reverse ()); assertThat (toSort.get (0), nullValue ());
vlastné poradie - reťazce podľa dĺžky
private class OrderingByLenght extends Ordering {@Override public int compare (String s1, String s2) {return Ints.compare (s1.length (), s2.length ()); }} List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = new OrderingByLenght (); Collections.sort (toSort, byLength); Objednávka expectOrder = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (expectOrder.isOrdered (toSort))
kontrola výslovnej objednávky
Zoznam toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = new OrderingByLenght (); Collections.sort (toSort, byLength); Objednávka expectOrder = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (expectOrder.isOrdered (toSort));
kontrola objednávania reťazcov
List toSort = Arrays.asList (3, 5, 4, 2, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertFalse (Ordering.natural (). isStrictlyOrdered (toSort));
druhotné objednávanie
Zoznam toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = new OrderingByLenght (); Collections.sort (toSort, byLength.compound (Ordering.natural ())); Objednávka expectOrder = Ordering.explicit (Lists.newArrayList ("b", "aa", "zz", "ccc")); assertTrue (expectOrder.isOrdered (toSort));
komplexný príklad objednávania na mieru - s reťazením triediť pomocou natiahnuť zastúpenie zoradiť a potom nájsť (binárne vyhľadávanie) nájsť min / max bez nutnosti triedenia (rýchlejšie) vytvorenie triedenej kópie zoznamu z objednávky vytvorenie triedenej čiastočnej kópie - najmenej prvkov objednávanie cez sprostredkovateľskú funkciu – Poznámka: logika zoradenia najskôr spustí čísla pomocou funkcie - transformuje ich na reťazce - potom zoradí prirodzené usporiadanie na reťazcoch Guava je komplexná a fantasticky užitočná knižnica - tu je niekoľko ďalších rozhraní API zahrnutých vo forme kuchárskej knihy: Užite si to. Tento experimentálny formát - kuchárska kniha - má jasné zameranie - jednoduchosť a rýchlosť, čo väčšina receptov má žiadne ďalšie vysvetlenie okrem samotného príkladu kódu. A ako som už spomínal - toto ako živý dokument - nové príklady a prípady použitia sú vítané v komentároch a ja ich budem naďalej pridávať, keď ich narazím. Implementácia všetkých týchto príkladov a útržkov kódu nájdete na GitHub - toto je projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.Zoznam toSort = Arrays.asList ("zz", "aa", null, "b", "ccc"); Collections.sort (toSort, new OrderingByLenght (). Reverse (). Compound (Ordering.natural ()). NullsLast ()); System.out.println (toSort);
List toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); Objednávka expectOrder = Ordering.explicit (Lists.newArrayList (1, 11, 2)); assertTrue (expectOrder.isOrdered (toSort));
List toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); int found = Ordering.usingToString (). binarySearch (toSort, 2); System.out.println (nájdené);
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); int found = Ordering.usingToString (). min (toSort); assertThat (nájdené, rovnajúce sa (1));
Zoznam toSort = Arrays.asList ("aa", "b", "ccc"); Zoznam triedenýCopy = nový OrderingByLenght (). SeřazenýCopy (toSort); Objednávka expectOrder = Ordering.explicit (Lists.newArrayList ("b", "aa", "ccc")); assertFalse (expectOrder.isOrdered (toSort)); assertTrue (expectOrder.isOrdered (sortCopy));
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); Zoznam najmenejOf = Ordering.natural (). NajmenejOf (toSort, 3); Očakávaný zoznam = Lists.newArrayList (1, 2, 8); assertThat (očakávané, rovnajúce sa (najmenej));
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); Ordering ordering = Ordering.natural (). OnResultOf (Functions.toStringFunction ()); Zoznam triedenýCopy = ordering.sortedCopy (toSort); Očakávaný zoznam = Lists.newArrayList (1, 100, 11, 14, 2, 8); assertThat (očakáva sa, equalTo (sortCopy));
3. Viac kuchárskych kníh Guava
Guava funkčná kuchárska kniha
Kuchárska kniha zbierok Guava
4. Záver