Guide til Guava's Ordering

1. Oversikt

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

De Bestilling klasse implementerer Komparator grensesnitt og gir oss et nyttig flytende API for å lage og kjede sammenliknere.

Som en rask sidenote er det også verdt å se på det nye Comparator.comparing () API - som gir lignende funksjonalitet; her er et praktisk eksempel som bruker API.

2. Opprette Bestilling

Bestilling har en nyttig byggemetode som returnerer en riktig forekomst som kan brukes i en sortere() metode på samlinger eller andre steder der en forekomst av Komparator trengs.

Vi kan opprette naturlig ordreforekomst ved å utføre metode naturlig():

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

La oss si at vi har en samling av Person gjenstander:

klasse Person {privat Strengnavn; privat Hele alder; // standard konstruktører, getters}

Og vi vil sortere en liste over slike objekter etter alder felt. Vi kan lage vår skikk Bestilling som vil gjøre akkurat det ved å utvide det:

Liste personer = Arrays.asList (ny person ("Michael", 10), ny person ("Alice", 3)); Ordering orderingByAge = new Ordering () {@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);

Da kan vi bruke vår orderingByAge og gi den videre sortere() metode.

3. Kjetting Bestillinger

En nyttig funksjon i denne klassen er at vi kan kjede forskjellige måter å Bestilling. La oss si at vi har en samling personer, og vi vil sortere den etter alder felt og har null aldersfeltverdier i begynnelsen av en liste:

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

Det viktige å legge merke til her er en rekkefølge der spesielt Bestillings blir utført - rekkefølgen er fra høyre til venstre. Så først onResultOf () kjøres og den metoden trekker ut feltet vi vil sammenligne.

Deretter, nullFirst () komparator utføres. På grunn av det vil den resulterende sorterte samlingen ha en Person objekt som har en null som en alder feltet på begynnelsen av listen.

På slutten av sorteringsprosessen, alder felt sammenlignes med naturlig bestilling som spesifisert ved hjelp av metoden naturlig().

4. Konklusjon

I denne artikkelen så vi på Bestilling klasse fra Guava bibliotek som lar oss skape mer flytende og elegant Komparators. Vi opprettet vår skikk Bestilling, vi brukte forhåndsdefinerte fra API, og vi lenket dem for å oppnå mer tilpasset rekkefølge.

Implementeringen av alle disse eksemplene og kodebitene finnes i GitHub-prosjektet - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


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