Guava bestilling av kokebok
1. Introduksjon
Denne kokeboken illustrerer hvordan du bruker Guava-stil Bestilling og komparatorer. Det fortsetter kokeboken og eksempelfokusformatet som jeg startet i forrige innlegg om Guava-samlinger.
2. Kokeboken
håndtere null i en samling
null først
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsFirst ()); assertThat (toSort.get (0), nullValue ());
null sist
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 (). er bestilt (tilSort));
kjetting 2 bestillinger
List toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural (). Reverse ());
reversere en bestilling
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast (). Reverse ()); assertThat (toSort.get (0), nullValue ());
tilpasset rekkefølge - Strenger etter lengde
privat klasse OrderingByLenght utvider bestilling {@Override public int compare (String s1, String s2) {return Ints.compare (s1.length (), s2.length ()); }} List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Bestilling etter lengde = ny OrderingByLenght (); Collections.sort (toSort, byLength); Bestilling av forventet bestilling = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (expectOrder.isOrdered (toSort))
sjekke eksplisitt rekkefølge
List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Bestilling etter lengde = ny OrderingByLenght (); Collections.sort (toSort, byLength); Bestilling av forventet bestilling = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (expectOrder.isOrdered (toSort));
sjekke strengbestilling
List toSort = Arrays.asList (3, 5, 4, 2, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertFalse (Ordering.natural (). isStrictlyOrdered (toSort));
sekundærbestilling
List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Bestilling etter lengde = ny OrderingByLenght (); Collections.sort (toSort, byLength.compound (Ordering.natural ())); Bestilling forventetOrder = Ordering.explicit (Lists.newArrayList ("b", "aa", "zz", "ccc")); assertTrue (expectOrder.isOrdered (toSort));
komplekst spesialbestillingseksempel - med kjetting sorter ved hjelp av toString representasjon sorter, finn deretter (binært søk) finn min / maks uten å måtte sortere (raskere) lage en sortert kopi av listen fra en bestilling lage en sortert delkopi - de færreste elementene bestilling via mellomledd Funksjon – Merk: sorteringslogikken vil først kjøre tallene gjennom funksjonen - transformere dem til strenger - deretter sortere med naturlig rekkefølge på strengene Guava er et omfattende og fantastisk nyttig bibliotek - her er noen flere API-er dekket i kokebokform: Nyt. Dette eksperimentelle formatet - kokeboken - har et tydelig fokus - enkelhet og hastighet, slik de fleste oppskrifter har ingen ytterligere forklaring enn selve kodeeksemplet. Og som jeg nevnte før - dette som et levende dokument - nye eksempler og brukssaker er velkomne i kommentarene, og jeg vil fortsette å legge til mine egne når jeg støter på dem. Implementeringen av alle disse eksemplene og kodebiter kan du finne på GitHub - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.List 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 ()); Bestilling 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 funnet = Ordering.usingToString (). binarySearch (toSort, 2); System.out.println (funnet);
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); int funnet = Ordering.usingToString (). min (toSort); assertThat (funnet, equalTo (1));
List toSort = Arrays.asList ("aa", "b", "ccc"); Liste sortedCopy = ny OrderingByLenght (). SortedCopy (toSort); Bestilling av forventet bestilling = Ordering.explicit (Lists.newArrayList ("b", "aa", "ccc")); assertFalse (expectOrder.isOrdered (toSort)); assertTrue (expectOrder.isOrdered (sortedCopy));
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); List leastOf = Ordering.natural (). MinsteOf (toSort, 3); Liste forventet = Lists.newArrayList (1, 2, 8); assertThat (forventet, equalTo (minste av));
List toSort = 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 kokebøker
Guava funksjonell kokebok
Guava Collections Cookbook
4. Konklusjon