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

Liste til sort = Arrays.asList ("zz", "aa", null, "b", "ccc"); Collections.sort (toSort, ny OrderingByLenght (). Reverse (). Sammensatte (Ordering.natural ()). NullsLast ()); System.out.println (toSort);

sorter ved hjælp af toString repræsentation

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));

sorter, find derefter (binær søgning)

List toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); int fundet = Ordering.usingToString (). binarySearch (toSort, 2); System.out.println (fundet);

find min / max uden at skulle sortere (hurtigere)

Liste til sortering = Arrays.asList (2, 1, 11, 100, 8, 14); int fundet = Ordering.usingToString (). min (toSort); hævder, at (fundet, lig med (1));

oprette en sorteret kopi af listen fra en bestilling

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));

opretter en sorteret delkopi - de mindst få elementer

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));

bestilling via formidler Funktion

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));

Bemærk: sorteringslogikken vil først køre tallene gennem funktionen - omdanne dem til strenge - derefter sortere med naturlig rækkefølge på strengene

3. Flere Guava-kogebøger

Guava er et omfattende og fantastisk nyttigt bibliotek - her er et par flere API'er dækket i kogebogform:

  • Guava funktionel kogebog

  • Guava Samlinger Kogebog

God fornøjelse.

4. Konklusion

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.


$config[zx-auto] not found$config[zx-overlay] not found