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

Popis toSort = Arrays.asList ("zz", "aa", null, "b", "ccc"); Collections.sort (toSort, new OrderingByLenght (). Reverse (). Spoj (Ordering.natural ()). NullsLast ()); System.out.println (toSort);

sortirati pomoću toString zastupanje

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

sortiraj, a zatim pronađi (binarno pretraživanje)

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

pronađi min / max bez razvrstavanja (brže)

Popis toSort = Arrays.asList (2, 1, 11, 100, 8, 14); int pronađeno = Ordering.usingToString (). min (toSort); assertThat (pronađeno, jednakoTo (1));

stvaranje sortirane kopije popisa iz narudžbe

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

stvaranje sortirane djelomične kopije - najmanje nekoliko elemenata

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

naručivanje putem posredničke funkcije

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

Bilješka: logika sortiranja prvo će pokretati brojeve kroz funkciju - pretvarajući ih u žice - a zatim sortirati prirodnim redoslijedom na žicama

3. Više Guava kuharica

Guava je sveobuhvatna i fantastično korisna knjižnica - evo još nekoliko API-ja obuhvaćenih kuharicom:

  • Funkcionalna kuharica Guava

  • Kuharica zbirki Guava

Uživati.

4. Zaključak

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.


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