Gids voor het bestellen van Guava

1. Overzicht

In dit artikel zullen we kijken Bestellen klasse uit de Guava-bibliotheek.

De Bestellen class implementeert het Comparator interface en geeft ons een handige, vloeiende API voor het maken en koppelen van vergelijkers.

Als een korte kanttekening is het ook de moeite waard om naar het nieuwe te kijken Comparator.comparing () API - die vergelijkbare functionaliteit biedt; hier is een praktisch voorbeeld met behulp van die API.

2. Creëren Bestellen

Bestellen heeft een handige builder-methode die een juiste instantie retourneert die kan worden gebruikt in een soort() methode op verzamelingen of ergens anders waar een instantie van Comparator is nodig.

We kunnen een natuurlijke orderinstantie creëren door de methode uit te voeren natuurlijk ():

Lijst gehele getallen = Arrays.asList (3, 2, 1); integers.sort (Ordering.natural ()); assertEquals (Arrays.asList (1,2,3), gehele getallen);

Laten we zeggen dat we een verzameling hebben van Persoon voorwerpen:

klasse Persoon {privé Stringnaam; privé Integer leeftijd; // standard constructors, getters}

En we willen een lijst van dergelijke objecten sorteren op leeftijd veld. We kunnen onze aangepaste maken Bestellen dat zal precies dat doen door het uit te breiden:

Lijst personen = Arrays.asList (nieuwe persoon ("Michael", 10), nieuwe persoon ("Alice", 3)); Bestellen orderByAge = nieuwe Ordering () {@Override public int Compare (Person p1, Person p2) {return Ints.compare (p1.age, p2.age); }}; persons.sort (orderByAge); assertEquals (Arrays.asList (nieuwe persoon ("Alice", 3), nieuwe persoon ("Michael", 10)), personen);

Dan kunnen we onze bestellenByAge en geef het door aan soort() methode.

3. Keten Bestellingen

Een handig kenmerk van deze klasse is dat we verschillende manieren van Bestellen. Laten we zeggen dat we een verzameling personen hebben en we willen deze sorteren op leeftijd veld en hebben nul leeftijdsveldwaarden aan het begin van een lijst:

Lijst personen = Arrays.asList (nieuwe persoon ("Michael", 10), nieuwe persoon ("Alice", 3), nieuwe persoon ("Thomas", null)); Bestellen bestellen = Bestellen .natural () .nullsFirst () .onResultOf (nieuwe Functie () {@Override openbaar Vergelijkbaar toepassen (Persoon persoon) {retour persoon.age;}}); personen.sorteren (bestellen); assertEquals (Arrays.asList (nieuwe persoon ("Thomas", null), nieuwe persoon ("Alice", 3), nieuwe persoon ("Michael", 10)), personen);

Het belangrijkste dat hier moet worden opgemerkt, is een volgorde waarin Bestellens worden uitgevoerd - volgorde is van rechts naar links. Dus ten eerste onResultOf () wordt uitgevoerd en die methode extraheert het veld dat we willen vergelijken.

Dan, nullFirst () comparator wordt uitgevoerd. Daarom heeft de resulterende gesorteerde verzameling een Persoon object met een nul als een leeftijd veld aan het begin van de lijst.

Aan het einde van het sorteerproces, leeftijd velden worden vergeleken met behulp van natuurlijke ordening zoals gespecificeerd met behulp van de methode natuurlijk ().

4. Conclusie

In dit artikel hebben we gekeken naar Bestellen klasse uit de Guava-bibliotheek waarmee we vloeiender en eleganter kunnen maken Comparators. We hebben onze gewoonte gemaakt Bestellen, we gebruikten vooraf gedefinieerde API's en we hebben ze aan een ketting gelegd om meer aangepaste volgorde te krijgen.

De implementatie van al deze voorbeelden en codefragmenten is te vinden in het GitHub-project - dit is een op Maven gebaseerd project, dus het moet gemakkelijk te importeren en uit te voeren zijn zoals het is.