Guava Kookboek bestellen
1. Inleiding
Dit kookboek illustreert hoe de Guava-stijl Ordering en Comparators te gebruiken. Het zet het kookboek- en voorbeeldfocusformaat voort dat ik begon in het vorige bericht over Guava-collecties.
2. Het kookboek
omgaan met null-waarden in een collectie
nulls eerst
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsFirst ()); assertThat (toSort.get (0), nullValue ());
nulls laatste
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast ()); assertThat (toSort.get (toSort.size () - 1), nullValue ());
natuurlijke ordening
List toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertTrue (Ordering.natural (). isOrdered (toSort));
2 bestellingen koppelen
List toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural (). Reverse ());
een volgorde omkeren
List toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast (). Reverse ()); assertThat (toSort.get (0), nullValue ());
aangepaste volgorde - Strings op lengte
private class OrderingByLenght breidt Ordering uit {@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 = nieuwe OrderingByLenght (); Collections.sort (toSort, byLength); Bestellen verwachtOrder = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (verwachteOrder.isOrdered (toSort))
controle expliciete bestelling
List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = nieuwe OrderingByLenght (); Collections.sort (toSort, byLength); Bestellen verwachtOrder = Ordering.explicit (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (verwachteOrder.isOrdered (toSort));
het controleren van de volgorde van de string
List toSort = Arrays.asList (3, 5, 4, 2, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertFalse (Ordering.natural (). isStrictlyOrdered (toSort));
secundaire ordening
List toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = nieuwe OrderingByLenght (); Collections.sort (toSort, byLength.compound (Ordering.natural ())); Bestellen verwachtOrder = Ordering.explicit (Lists.newArrayList ("b", "aa", "zz", "ccc")); assertTrue (verwachteOrder.isOrdered (toSort));
complex voorbeeld van bestelling op maat - met ketting sorteren met toString vertegenwoordiging sorteer, dan vind (binair zoeken) vind min / max zonder te hoeven sorteren (sneller) het creëren van een gesorteerde kopie van de lijst vanuit een bestelling het maken van een gesorteerde gedeeltelijke kopie - de minste elementen bestellen via tussenpersoon Functie – Opmerking: de sorteerlogica zal eerst de getallen door de functie leiden - ze transformeren in strings - en vervolgens sorteren met natuurlijke volgorde op de strings Guava is een uitgebreide en fantastisch nuttige bibliotheek - hier zijn nog een paar API's die in kookboekvorm worden behandeld: Genieten. Dit experimentele formaat - het kookboek - heeft een duidelijke focus - eenvoud en snelheid, net als de meeste recepten geen aanvullende uitleg anders dan het codevoorbeeld zelf. En zoals ik al eerder zei - dit als een levend document - nieuwe voorbeelden en use cases zijn welkom in de comments, en ik zal mijn eigen voorbeelden blijven toevoegen als ik ze tegenkom. De implementatie van al deze voorbeelden en codefragmenten is te vinden op GitHub - dit is een op Maven gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.List toSort = Arrays.asList ("zz", "aa", null, "b", "ccc"); Collections.sort (toSort, nieuwe OrderingByLenght (). Reverse (). Compound (Ordering.natural ()). NullsLast ()); System.out.println (toSort);
List toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); Bestellen verwachtOrder = Ordering.explicit (Lists.newArrayList (1, 11, 2)); assertTrue (verwachteOrder.isOrdered (toSort));
List toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); int gevonden = Ordering.usingToString (). binarySearch (toSort, 2); System.out.println (gevonden);
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); int gevonden = Ordering.usingToString (). min (toSort); assertThat (gevonden, gelijk aan (1));
List toSort = Arrays.asList ("aa", "b", "ccc"); Lijst gesorteerdCopy = nieuwe OrderingByLenght (). GesorteerdCopy (toSort); Bestellen verwachtOrder = Ordering.explicit (Lists.newArrayList ("b", "aa", "ccc")); assertFalse (verwachteOrder.isOrdered (toSort)); assertTrue (verwachteOrder.isOrdered (gesorteerde kopie));
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); List leastOf = Ordering.natural (). LeastOf (toSort, 3); Lijst verwacht = Lists.newArrayList (1, 2, 8); assertThat (verwacht, gelijk aan (minste));
List toSort = Arrays.asList (2, 1, 11, 100, 8, 14); Bestellen bestellen = Ordering.natural (). OnResultOf (Functions.toStringFunction ()); Lijst gesorteerdCopy = order.sortedCopy (toSort); Lijst verwacht = Lists.newArrayList (1, 100, 11, 14, 2, 8); assertThat (verwacht, gelijk aan (gesorteerdCopy));
3. Meer Guava-kookboeken
Guava Functioneel kookboek
Guava Collections kookboek
4. Conclusie