Vejledning til Guavas bestilling

1. Oversigt

I denne artikel vil vi se på Bestilling klasse fra Guava biblioteket.

Det Bestilling klasse implementerer Komparator interface og giver os et nyttigt flydende API til oprettelse og sammenkædning af komparatorer.

Som en hurtig sidenote er det også værd at se på det nye Comparator.comparing () API - som giver lignende funktionalitet; her er et praktisk eksempel ved hjælp af denne API.

2. Oprettelse Bestilling

Bestilling har en nyttig bygningsmetode, der returnerer en korrekt forekomst, der kan bruges i en sortere() metode på samlinger eller andre steder, hvor en forekomst af Komparator er nødvendig.

Vi kan oprette naturlig ordreinstans ved at udføre metoden naturlig():

Liste heltal = Arrays.asList (3, 2, 1); heltal.sort (Ordering.natural ()); assertEquals (Arrays.asList (1,2,3), heltal);

Lad os sige, at vi har en samling af Person genstande:

klasse Person {privat strengnavn; privat heltalealder // standard konstruktører, getters}

Og vi vil sortere en liste over sådanne objekter efter alder Mark. Vi kan oprette vores brugerdefinerede Bestilling det vil gøre netop det ved at udvide det:

Liste over personer = Arrays.asList (ny person ("Michael", 10), ny person ("Alice", 3)); Bestilling af orderingByAge = ny bestilling () {@ Override public int Compare (Person p1, Person p2) {return Ints.compare (p1.age, p2.age); }}; persons.sort (orderingByAge); assertEquals (Arrays.asList (ny person ("Alice", 3), ny person ("Michael", 10)), personer);

Så kan vi bruge vores orderingByAge og videregive det til sortere() metode.

3. Lænkning Bestillinger

Et nyttigt træk ved denne klasse er, at vi kan kæde forskellige måder at Bestilling. Lad os sige, at vi har en samling personer, og vi vil sortere den efter alder felt og har nul aldersfeltværdier i begyndelsen af ​​en liste:

Vis personer = Arrays.asList (ny person ("Michael", 10), ny person ("Alice", 3), ny person ("Thomas", null)); Ordering ordering = Ordering .natural () .nullsFirst () .onResultOf (new Function () {@Override public Comparable apply (Person person) {return person.age;}}); persons.sort (bestilling); assertEquals (Arrays.asList (ny person ("Thomas", null), ny person ("Alice", 3), ny person ("Michael", 10)), personer);

Den vigtige ting at bemærke her er en rækkefølge, hvor særlig Bestillings udføres - rækkefølgen er fra højre mod venstre. Så for det første onResultOf () udføres, og denne metode udtrækker det felt, som vi vil sammenligne.

Derefter, nullFirst () komparator udføres. På grund af det vil den resulterende sorterede samling have en Person objekt, der har en nul som en alder i begyndelsen af ​​listen.

I slutningen af ​​sorteringsprocessen alder felter sammenlignes ved hjælp af naturlig rækkefølge som angivet ved hjælp af metoden naturlig().

4. Konklusion

I denne artikel kiggede vi på Bestilling klasse fra Guava bibliotek, der giver os mulighed for at skabe mere flydende og elegant Komparators. Vi skabte vores brugerdefinerede Bestilling, vi brugte foruddefinerede fra API'et, og vi lænkede dem for at opnå mere tilpasset rækkefølge.

Implementeringen af ​​alle disse eksempler og kodestykker findes i GitHub-projektet - 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