Guava Bestilling Kogebog
1. Introduktion
Denne kogebog illustrerer hvordan man bruger Guava-stilbestilling og komparatorer. Det fortsætter kogebogen og eksemplets fokusformat, som jeg startede i det forrige indlæg om Guava-samlinger.
2. Kogebogen
beskæftiger sig med nuller i en samling
nul først
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsFirst ()); assertThat (toSort.get (0), nullValue ());
nul sidste
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast ()); assertThat (toSort.get (toSort.size () - 1), nullValue ());
naturlig bestilling
List toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertTrue (Ordering.natural (). bestilles (tilSort));
kæde 2 ordrer
List toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural (). Reverse ());
omvendt en ordre
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast (). Reverse ()); assertThat (toSort.get (0), nullValue ());
brugerdefineret rækkefølge - Strenge efter længde
privat klasse OrderingByLenght udvider bestilling {@ Override public int compare (String s1, String s2) {return Ints.compare (s1.length (), s2.length ()); }} Liste til sort = Arrays.asList ("zz", "aa", "b", "ccc"); Bestilling efter længde = ny OrderingByLenght (); Collections.sort (toSort, byLength); Bestilling forventetOrder = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (expectOrder.isOrdered (toSort))
kontrol af eksplicit rækkefølge
Liste til sort = Arrays.asList ("zz", "aa", "b", "ccc"); Bestilling efter længde = ny OrderingByLenght (); Collections.sort (toSort, byLength); Bestilling forventetOrder = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (forventetOrder.isOrdered (toSort));
kontrol af strengbestilling
List toSort = Arrays.asList (3, 5, 4, 2, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertFalse (Ordering.natural (). er strengt bestilt (tilSort));
sekundær bestilling
Liste til sort = Arrays.asList ("zz", "aa", "b", "ccc"); Bestilling efter længde = ny OrderingByLenght (); Collections.sort (toSort, byLength.compound (Ordering.natural ())); Bestilling forventetOrder = Ordering.explicit (Lists.newArrayList ("b", "aa", "zz", "ccc")); assertTrue (expectOrder.isOrdered (toSort));
komplekst brugerdefineret bestillingseksempel - med kæde sorter ved hjælp af toString repræsentation sorter, find derefter (binær søgning) find min / max uden at skulle sortere (hurtigere) oprette en sorteret kopi af listen fra en bestilling opretter en sorteret delkopi - de mindst få elementer bestilling via formidler Funktion – Bemærk: sorteringslogikken vil først køre tallene gennem funktionen - omdanne dem til strenge - derefter sortere med naturlig rækkefølge på strengene Guava er et omfattende og fantastisk nyttigt bibliotek - her er et par flere API'er dækket i kogebogform: God fornøjelse. Dette eksperimentelle format - kogebogen - har et klart fokus - enkelhed og hastighed, som de fleste opskrifter har ingen yderligere forklaring end selve kodeeksemplet. Og som jeg nævnte før - dette som et levende dokument - nye eksempler og brugssager er velkomne i kommentarerne, og jeg fortsætter med at tilføje mine egne, når jeg løber ind i dem. Implementeringen af alle disse eksempler og kodestykker kan findes på GitHub - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.Liste til sort = Arrays.asList ("zz", "aa", null, "b", "ccc"); Collections.sort (toSort, ny OrderingByLenght (). Reverse (). Sammensatte (Ordering.natural ()). NullsLast ()); System.out.println (toSort);
List toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); Bestilling forventetOrder = Ordering.explicit (Lists.newArrayList (1, 11, 2)); assertTrue (expectOrder.isOrdered (toSort));
List toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); int fundet = Ordering.usingToString (). binarySearch (toSort, 2); System.out.println (fundet);
Liste til sortering = Arrays.asList (2, 1, 11, 100, 8, 14); int fundet = Ordering.usingToString (). min (toSort); hævder, at (fundet, lig med (1));
Liste til sort = Arrays.asList ("aa", "b", "ccc"); Liste sortedCopy = ny OrderingByLenght (). SortedCopy (toSort); Bestilling forventetOrder = Ordering.explicit (Lists.newArrayList ("b", "aa", "ccc")); assertFalse (forventetOrder.isOrdered (toSort)); assertTrue (expectOrder.isOrdered (sortedCopy));
Liste til sortering = Arrays.asList (2, 1, 11, 100, 8, 14); List leastOf = Ordering.natural (). LeastOf (toSort, 3); Liste forventet = Lists.newArrayList (1, 2, 8); assertThat (forventet, equalTo (mindstOf));
Liste til sortering = Arrays.asList (2, 1, 11, 100, 8, 14); Ordering ordering = Ordering.natural (). OnResultOf (Functions.toStringFunction ()); List sortedCopy = ordering.sortedCopy (toSort); Liste forventet = Lists.newArrayList (1, 100, 11, 14, 2, 8); assertThat (forventet, equalTo (sortedCopy));
3. Flere Guava-kogebøger
Guava funktionel kogebog
Guava Samlinger Kogebog
4. Konklusion