Een gids voor Apache Commons Collections CollectionUtils

Dit artikel maakt deel uit van een serie: • Apache Commons Collections Bag

• Apache Commons-verzamelingen SetUtils

• Apache Commons Collections OrderedMap

• Apache Commons-collecties BidiMap

• Een gids voor Apache Commons Collections CollectionUtils (huidig ​​artikel) • Apache Commons Collections MapUtils

• Gids voor Apache Commons CircularFifoQueue

1. Overzicht

Simpel gezegd, de ApacheCollectionUtils biedt hulpprogramma's voor algemene bewerkingen die een breed scala aan gebruiksscenario's bestrijken en helpt bij het vermijden van het schrijven van standaardcode. De bibliotheek richt zich op oudere JVM-releases omdat momenteel vergelijkbare functionaliteit wordt geboden door de Java 8's Stroom API.

2. Maven afhankelijkheden

We moeten de volgende afhankelijkheid toevoegen om aan de slag te gaan CollectieUtils:

 org.apache.commons commons-collections4 4.1 

De laatste versie van de bibliotheek is hier te vinden.

3. Installatie

Laten we toevoegen Klant en Adres klassen:

openbare klasse Klant {privé Geheel getal-id; private String naam; privé adres adres; // standaard getters en setters} public class Address {private String locality; particuliere String stad; // standaard getters en setters}

We zullen ook het volgende bij de hand houden Klant en Lijst instanties klaar om onze implementatie te testen:

Klant customer1 = nieuwe klant (1, "Daniel", "locality1", "city1"); Klant customer2 = nieuwe klant (2, "Fredrik", "locality2", "city2"); Klant customer3 = nieuwe klant (3, "Kyle", "locality3", "city3"); Klant customer4 = nieuwe klant (4, "Bob", "locality4", "city4"); Klant customer5 = nieuwe klant (5, "Cat", "locality5", "city5"); Klant customer6 = nieuwe klant (6, "John", "locality6", "city6"); Lijst lijst1 = Arrays.asList (klant1, klant2, klant3); List list2 = Arrays.asList (klant4, klant5, klant6); List list3 = Arrays.asList (klant1, klant2); List linkedList1 = nieuwe LinkedList (lijst1);

4. CollectionUtils

Laten we eens kijken naar enkele van de meest gebruikte methoden in Apache Commons CollectionUtils klasse.

4.1. Alleen niet-null-elementen toevoegen

We kunnen gebruiken CollectionUtils's addIgnoreNull methode om alleen niet-null-elementen toe te voegen aan een opgegeven verzameling.

Het eerste argument voor deze methode is de verzameling waaraan we het element willen toevoegen en het tweede argument is het element dat we willen toevoegen:

@Test openbare ongeldig gegevenList_whenAddIgnoreNull_thenNoNullAdded () {CollectionUtils.addIgnoreNull (lijst1, null); assertFalse (list1.contains (null)); }

Merk op dat de nul is niet aan de lijst toegevoegd.

4.2. Lijsten verzamelen

We kunnen gebruiken sorteren methode om twee reeds gesorteerde lijsten te verzamelen. Deze methode gebruikt beide lijsten, die we willen samenvoegen, als argumenten en retourneert een enkele gesorteerde lijst:

@Test openbare ongeldig gegevenTwoSortedLists_whenCollated_thenSorted () {Lijst gesorteerdList = CollectionUtils.collate (lijst1, lijst2); assertEquals (6, gesorteerdList.size ()); assertTrue (gesorteerdeList.get (0) .getNaam (). is gelijk aan ("Bob")); assertTrue (sortList.get (2) .getName (). equals ("Daniel")); }

4.3. Objecten transformeren

We kunnen de transformeren methode om objecten van klasse A om te zetten in verschillende objecten van klasse B. Deze methode gebruikt een lijst met objecten van klasse A en a transformator als argumenten.

Het resultaat van deze bewerking is een lijst met objecten van klasse B:

@Test openbare ongeldig gegevenListOfCustomers_whenTransformed_thenListOfAddress () {Collection addressCol = CollectionUtils.collect (lijst1, nieuwe Transformer () {openbaar adrestransformatie (klant klant) {retourneer klant.getAddress ();}}); List addressList = nieuwe ArrayList (addressCol); assertTrue (addressList.size () == 3); assertTrue (addressList.get (0) .getLocality (). equals ("locality1")); }

4.4. Objecten filteren

Gebruik makend van filter we kunnen objecten die niet aan een bepaalde voorwaarde voldoen uit een lijst verwijderen.De methode gebruikt de lijst als het eerste argument en een Predikaat als tweede argument.

De filterInverse methode doet het tegenovergestelde. Het verwijdert objecten uit de lijst wanneer de Predikaat geeft true terug.

Beide filter en filterInverse terugkeer waar als de invoerlijst is gewijzigd, d.w.z. als ten minste één object uit de lijst is gefilterd:

@Test openbare ongeldige gegevenCustomerList_WhenFiltered_thenCorrectSize () {boolean isModified = CollectionUtils.filter (linkedList1, nieuw predikaat () {openbare boolean evalueren (klant klant) {return Arrays.asList ("Daniel", "Kyle"). Bevat (customer.getName () ));}}); assertTrue (linkedList1.size () == 2); }

We kunnen gebruiken selecteer en selectRejected als we willen dat de resulterende lijst wordt geretourneerd in plaats van een booleaanse vlag.

4.5. Controleren op niet-leeg

Het isNotEmpty methode is best handig als we willen controleren of er ten minste één element in een lijst staat. De andere manier om hetzelfde te controleren is:

boolean isNotEmpty = (lijst! = null && list.size ()> 0);

Hoewel de bovenstaande regel code hetzelfde doet, CollectionUtils.isNotEmpty houdt onze code schoner:

@Test openbare leegte gegevenNonEmptyList_whenCheckedIsNotEmpty_thenTrue () {assertTrue (CollectionUtils.isNotEmpty (lijst1)); }

De is leeg doet het tegenovergestelde. Het controleert of de gegeven lijst null is of dat er nul elementen in de lijst staan:

Lijst emptyList = nieuwe ArrayList (); Lijst nullList = null; assertTrue (CollectionUtils.isEmpty (nullList)); assertTrue (CollectionUtils.isEmpty (emptyList));

4.6. Inclusie controleren

We kunnen gebruiken isSubCollection om te controleren of een collectie zich in een andere collectie bevindt. isSubCollection neemt twee verzamelingen als argumenten en retourneert waar als de eerste collectie een deelcollectie is van de tweede collectie:

@Test openbare leegte gegevenCustomerListAndASubcollection_whenChecked_thenTrue () {assertTrue (CollectionUtils.isSubCollection (lijst3, lijst1)); }

Een collectie is een subcollectie van een andere collectie als het aantal keren dat een object in de eerste collectie voorkomt, kleiner is dan of gelijk is aan het aantal keren dat het voorkomt in de tweede collectie.

4.7. Snijpunt van collecties

We kunnen gebruiken CollectionUtils.intersection methode om de kruising van twee verzamelingen te krijgen. Deze methode heeft twee verzamelingen nodig en retourneert een verzameling elementen die in beide invoerverzamelingen veel voorkomen:

@Test openbare ongeldig gegevenTwoLists_whenIntersected_thenCheckSize () {Verzameling intersectie = CollectionUtils.intersection (lijst1, lijst3); assertTrue (intersection.size () == 2); }

Het aantal keren dat een element voorkomt in de resulterende verzameling is een minimum van het aantal keren dat het voorkomt in elk van de gegeven verzamelingen.

4.8. Collecties aftrekken

CollectionUtils.subtract neemt twee verzamelingen als invoer en retourneert een verzameling die elementen bevat die wel in de eerste verzameling maar niet in de tweede verzameling voorkomen:

@Test openbare ongeldig gegevenTwoLists_whenSubtracted_thenCheckElementNotPresentInA () {Verzamelingsresultaat = CollectionUtils.subtract (lijst1, lijst3); assertFalse (result.contains (klant1)); }

Het aantal keren dat een verzameling voorkomt in het resultaat is het aantal keren dat deze voorkomt in de eerste verzameling min het aantal keren dat deze voorkomt in de tweede verzameling.

4.9. Unie van verzamelingen

CollectionUtils.union doet de vereniging van twee collecties en geeft een collectie terug die alle elementen bevat die aanwezig zijn in de eerste of de tweede collectie.

@Test openbare ongeldig gegevenTwoLists_whenUnioned_thenCheckElementPresentInResult () {Verzameling union = CollectionUtils.union (lijst1, lijst2); assertTrue (union.contains (customer1)); assertTrue (union.contains (customer4)); }

Het aantal keren dat een element voorkomt in de resulterende verzameling, is het maximum van het aantal keren dat het voorkomt in elk van de gegeven verzamelingen.

5. Conclusie

En we zijn klaar.

We hebben enkele van de meest gebruikte methoden van CollectionUtils - wat erg handig is om boilerplate te vermijden wanneer we werken met verzamelingen in onze Java-projecten.

Zoals gewoonlijk is de code beschikbaar op GitHub.

De volgende » Apache Commons-collecties MapUtils « Vorige Apache Commons Collections BidiMap

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