En guide til Apache Commons Collections CollectionUtils

Denne artikel er en del af en serie: • Apache Commons Collections Bag

• Apache Commons samlinger SetUtils

• Apache Commons samlinger OrderedMap

• Api Commons samlinger BidiMap

• En guide til Apache Commons Collections CollectionUtils (nuværende artikel) • Apache Commons Collections MapUtils

• Vejledning til Apache Commons CircularFifoQueue

1. Oversigt

Kort sagt, den ApacheCollectionUtils giver hjælpemetoder til almindelige operationer, der dækker en lang række brugssager og hjælper med at undgå at skrive kedelpladekode. Biblioteket er målrettet mod ældre JVM-udgivelser, fordi lignende funktioner i øjeblikket leveres af Java 8'er Strøm API.

2. Maven-afhængigheder

Vi er nødt til at tilføje følgende afhængighed for at komme i gang med CollectionUtils:

 org.apache.commons commons-collection4 4.1 

Den seneste version af biblioteket kan findes her.

3. Opsætning

Lad os tilføje Kunde og Adresseklasser:

offentlig klasse kunde {privat heltal id; privat strengnavn; privat adresse adresse // standard getters og setters} offentlig klasse Adresse {privat streng lokalitet; private String by; // standard getters og setter}

Vi holder også praktisk følgende: Kunde og Liste tilfælde klar til at teste vores implementering:

Kundekunde1 = ny kunde (1, "Daniel", "lokalitet1", "by1"); Kundekunde2 = ny kunde (2, "Fredrik", "lokalitet2", "by2"); Kundekunde3 = ny kunde (3, "Kyle", "lokalitet3", "by3"); Kundekunde4 = ny kunde (4, "Bob", "lokalitet4", "by4"); Kundekunde5 = ny kunde (5, "Kat", "lokalitet5", "by5"); Kundekunde6 = ny kunde (6, "John", "lokalitet6", "by6"); Liste liste1 = Arrays.asList (kunde1, kunde2, kunde3); Liste liste2 = Arrays.asList (kunde4, kunde5, kunde6); Liste liste3 = Arrays.asList (kunde1, kunde2); Liste linkedList1 = ny LinkedList (liste1);

4. CollectionUtils

Lad os gennemgå nogle af de mest anvendte metoder i Apache Commons CollectionUtils klasse.

4.1. Tilføjelse af kun ikke-nul-elementer

Vi kan bruge CollectionUtils's addIgnoreNull metode til kun at tilføje ikke-nul-elementer til en bestemt samling.

Det første argument til denne metode er den samling, som vi vil tilføje elementet til, og det andet argument er det element, som vi vil tilføje:

@Test offentligt ugyldigt givenList_whenAddIgnoreNull_thenNoNullAdded () {CollectionUtils.addIgnoreNull (list1, null); assertFalse (list1.contains (null)); }

Bemærk, at nul blev ikke føjet til listen.

4.2. Sorteringslister

Vi kan bruge sortere metode til at samle to allerede sorterede lister. Denne metode tager begge lister, som vi vil flette, som argumenter og returnerer en enkelt sorteret liste:

@Test offentlig ugyldighed givenTwoSortedLists_whenCollated_thenSorted () {List sortedList = CollectionUtils.collate (list1, list2); assertEquals (6, sortedList.size ()); assertTrue (sortedList.get (0) .getName (). er lig med ("Bob")); assertTrue (sortedList.get (2) .getName (). er lig med ("Daniel")); }

4.3. Transformerende objekter

Vi kan bruge transformere metode til at omdanne objekter i klasse A til forskellige objekter i klasse B. Denne metode tager en liste over objekter i klasse A og a transformer som argumenter.

Resultatet af denne operation er en liste over objekter i klasse B:

@Test offentlig ugyldighed givenListOfCustomers_whenTransformed_thenListOfAddress () {Collection addressCol = CollectionUtils.collect (list1, new Transformer () {public Address transform (Customer customer) {return customer.getAddress ();}}); Liste addressList = ny ArrayList (addressCol); assertTrue (addressList.size () == 3); assertTrue (addressList.get (0) .getLocality (). er lig med ("lokalitet1")); }

4.4. Filtrering af objekter

Ved brug af filter vi kan fjerne objekter, der ikke opfylder en given betingelse, fra en liste.Metoden tager listen som det første argument, og a Prædikat som sit andet argument.

Det filterInvers metode gør det modsatte. Det fjerner objekter fra listen, når Prædikat returnerer sandt.

Begge filter og filterInvers Vend tilbage rigtigt hvis inputlisten blev ændret, dvs. hvis mindst et objekt blev filtreret fra listen:

@Test offentlig ugyldighed givenCustomerList_WhenFiltered_thenCorrectSize () {boolean isModified = CollectionUtils.filter (linkedList1, new Predicate () {public boolean assess (Customer customer) {return Arrays.asList ("Daniel", "Kyle"). Indeholder (customer.getName ( ));}}); assertTrue (linkedList1.size () == 2); }

Vi kan bruge Vælg og vælg Afvist hvis vi ønsker, at den resulterende liste skal returneres snarere end et boolesk flag.

4.5. Kontrollerer for ikke-tom

Det er ikke tomt metoden er ret praktisk, når vi vil kontrollere, om der er mindst et enkelt element i en liste. Den anden måde at kontrollere det samme på er:

boolsk isNotEmpty = (liste! = null && list.size ()> 0);

Selvom ovenstående kodelinje gør det samme, CollectionUtils.isNotEmpty holder vores kode renere:

@Test offentlig ugyldighed givenNonEmptyList_whenCheckedIsNotEmpty_thenTrue () {assertTrue (CollectionUtils.isNotEmpty (list1)); }

Det er tom gør det modsatte. Det kontrollerer, om den givne liste er nul, eller at der er nul elementer på listen:

Liste emptyList = ny ArrayList (); Liste nullList = null; assertTrue (CollectionUtils.isEmpty (nullList)); assertTrue (CollectionUtils.isEmpty (emptyList));

4.6. Kontrol af inklusion

Vi kan bruge isSubCollection for at kontrollere, om en samling er indeholdt i en anden samling. isSubCollection tager to samlinger som argumenter og returnerer rigtigt hvis den første samling er en undersamling af den anden samling:

@Test offentlig ugyldighed givenCustomerListAndASubcollection_whenChecked_thenTrue () {assertTrue (CollectionUtils.isSubCollection (list3, list1)); }

En samling er underindsamling af en anden samling, hvis antallet af gange et objekt forekommer i den første samling er mindre end eller lig med antallet af gange, det forekommer i den anden samling.

4.7. Kryds af samlinger

Vi kan bruge CollectionUtils.intersection metode til at få krydset mellem to samlinger. Denne metode tager to samlinger og returnerer en samling af elementer, der er almindelige i begge indgangssamlingerne:

@Test offentlig ugyldighed givenTwoLists_whenIntersected_thenCheckSize () {Collection skæringspunkt = CollectionUtils.intersection (liste1, liste3); assertTrue (intersection.size () == 2); }

Antallet af gange et element forekommer i den resulterende samling er et minimum af antallet af gange det forekommer i hver af de givne samlinger.

4.8. Subtrahere samlinger

CollectionUtils.subtract tager to samlinger som input og returnerer en samling, der indeholder elementer, der er der i den første samling, men ikke i den anden samling:

@Test offentlig ugyldighed givenTwoLists_whenSubtracted_thenCheckElementNotPresentInA () {Samlingsresultat = CollectionUtils.subtract (liste1, liste3); assertFalse (result.contains (kunde1)); }

Antallet af gange, en samling forekommer i resultatet, er antallet af gange, den forekommer i den første samling minus antallet af gange, den forekommer i den anden samling.

4.9. Union of Collections

CollectionUtils.union forener to samlinger og returnerer en samling, der indeholder alle de elementer, der findes i enten den første eller den anden samling.

@Test offentlig ugyldighed givenTwoLists_whenUnioned_thenCheckElementPresentInResult () {Collection union = CollectionUtils.union (liste1, liste2); assertTrue (union.contains (kunde1)); assertTrue (union.contains (kunde4)); }

Antallet af gange et element forekommer i den resulterende samling er det maksimale antal gange det forekommer i hver af de givne samlinger.

5. Konklusion

Og vi er færdige.

Vi gennemgik nogle af de almindeligt anvendte metoder til CollectionUtils - hvilket er meget nyttigt for at undgå kedelplade, når vi arbejder med samlinger i vores Java-projekter.

Som sædvanlig er koden tilgængelig på GitHub.

Næste » Apache Commons samlinger MapUtils « Tidligere Apache Commons-samlinger BidiMap