Kuharica za naručivanje Guave
1. Uvod
Ova kuharica ilustrira kako koristiti naručivanje i usporedbe u stilu Guava. Nastavlja se s kuharskom knjigom i primjerom formata fokusa koji sam započeo u prethodnom postu o kolekcijama Guava.
2. Kuharica
bavljenje nulama u zbirci
prvo nule
Popis toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsFirst ()); assertThat (toSort.get (0), nullValue ());
nulls last
Popis toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast ()); assertThat (toSort.get (toSort.size () - 1), nullValue ());
prirodni poredak
Popis toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertTrue (Ordering.natural (). isOrdered (toSort));
lančano 2 narudžbe
Popis toSort = Arrays.asList (3, 5, 4, 1, 2); Collections.sort (toSort, Ordering.natural (). Reverse ());
preokrenuti redoslijed
Popis toSort = Arrays.asList (3, 5, 4, null, 1, 2); Collections.sort (toSort, Ordering.natural (). NullsLast (). Reverse ()); assertThat (toSort.get (0), nullValue ());
prilagođeni redoslijed - žice po duljini
privatna klasa OrderingByLenght produžuje naručivanje {@Preuzmi javni int usporedi (String s1, String s2) {return Ints.compare (s1.length (), s2.length ()); }} Popis toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = novo OrderingByLenght (); Collections.sort (toSort, byLength); Naručivanje očekujeOrder = Naručivanje.explicitno (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (očekuje seOrder.isOrdered (toSort))
provjeravanje eksplicitnog naloga
Popis toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = novo OrderingByLenght (); Collections.sort (toSort, byLength); Naručivanje očekujeOrder = Naručivanje.explicitno (Lists.newArrayList ("b", "zz", "aa", "ccc")); assertTrue (očekuje seOrder.isOrdered (toSort));
provjera redoslijeda nizova
Popis toSort = Arrays.asList (3, 5, 4, 2, 1, 2); Collections.sort (toSort, Ordering.natural ()); assertFalse (Ordering.natural (). isStrictlyOrdered (toSort));
sekundarni poredak
Popis toSort = Arrays.asList ("zz", "aa", "b", "ccc"); Ordering byLength = novo OrderingByLenght (); Collections.sort (toSort, byLength.compound (Ordering.natural ())); Naručivanje očekujeOrder = Naručivanje.explicitno (Lists.newArrayList ("b", "aa", "zz", "ccc")); assertTrue (očekuje seOrder.isOrdered (toSort));
složeni primjer naručivanja po mjeri - s ulančavanjem sortirati pomoću toString zastupanje sortiraj, a zatim pronađi (binarno pretraživanje) pronađi min / max bez razvrstavanja (brže) stvaranje sortirane kopije popisa iz narudžbe stvaranje sortirane djelomične kopije - najmanje nekoliko elemenata naručivanje putem posredničke funkcije – Bilješka: logika sortiranja prvo će pokretati brojeve kroz funkciju - pretvarajući ih u žice - a zatim sortirati prirodnim redoslijedom na žicama Guava je sveobuhvatna i fantastično korisna knjižnica - evo još nekoliko API-ja obuhvaćenih kuharicom: Uživati. Ovaj eksperimentalni format - kuharica - ima jasan fokus - jednostavnost i brzinu, što ima i većina recepata nikakvo dodatno objašnjenje osim samog primjera koda. I kao što sam već spomenuo - ovo kao živi dokument - novi primjeri i slučajevi upotrebe dobrodošli su u komentarima, a ja ću i dalje dodavati vlastite kad naletim na njih. Implementacija svih ovih primjera i isječaka koda možete pronaći na GitHubu - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo biti lako uvesti i pokrenuti kakav jest.Popis toSort = Arrays.asList ("zz", "aa", null, "b", "ccc"); Collections.sort (toSort, new OrderingByLenght (). Reverse (). Spoj (Ordering.natural ()). NullsLast ()); System.out.println (toSort);
Popis toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); Naručivanje očekujeOrder = Naručivanje.explicitno (Lists.newArrayList (1, 11, 2)); assertTrue (očekuje seOrder.isOrdered (toSort));
Popis toSort = Arrays.asList (1, 2, 11); Collections.sort (toSort, Ordering.usingToString ()); int pronađeno = Ordering.usingToString (). binarySearch (toSort, 2); System.out.println (pronađeno);
Popis toSort = Arrays.asList (2, 1, 11, 100, 8, 14); int pronađeno = Ordering.usingToString (). min (toSort); assertThat (pronađeno, jednakoTo (1));
Popis toSort = Arrays.asList ("aa", "b", "ccc"); Popis sortedCopy = novo OrderingByLenght (). SortedCopy (toSort); Naručivanje očekujeOrder = Naručivanje.explicitno (Lists.newArrayList ("b", "aa", "ccc")); assertFalse (očekuje seOrder.isOrdered (toSort)); assertTrue (očekuje seOrder.isOrdered (sortedCopy));
Popis toSort = Arrays.asList (2, 1, 11, 100, 8, 14); Popis najmanjiOf = Narudžba.natural (). NajmanjiOf (toSort, 3); Očekivani popis = Lists.newArrayList (1, 2, 8); assertThat (očekuje se, jednak je (najmanje));
Popis toSort = Arrays.asList (2, 1, 11, 100, 8, 14); Naručivanje narudžba = Naručivanje.natural (). OnResultOf (Functions.toStringFunction ()); Popis sortedCopy = ordering.sortedCopy (toSort); Očekivani popis = Lists.newArrayList (1, 100, 11, 14, 2, 8); assertThat (očekivano, jednakoTo (sortedCopy));
3. Više Guava kuharica
Funkcionalna kuharica Guava
Kuharica zbirki Guava
4. Zaključak