Sprievodca zbierkami Apache Commons CollectionUtils

Tento článok je súčasťou série: • Apache Commons Collections Bag

• SetUtils zbierok Apache Commons

• Apache Commons Collections OrderedMap

• Zbierka Apache Commons BidiMap

• Sprievodca zbierkami Apache Commons CollectionUtils (aktuálny článok) • Apache Commons zbierky MapUtils

• Sprievodca po Apache Commons CircularFifoQueue

1. Prehľad

Jednoducho povedané ApacheCollectionUtils poskytuje užitočné metódy pre bežné operácie, ktoré pokrývajú širokú škálu prípadov použitia a pomáha vyhnúť sa písaniu štandardných kódov. Knižnica sa zameriava na staršie vydania JVM, pretože v súčasnosti podobné funkcie poskytujú Java 8 Prúd API.

2. Maven závislosti

Aby sme mohli začať, musíme pridať nasledujúcu závislosť ZbierkaUtils:

 org.apache.commons commons-collections4 4.1 

Najnovšiu verziu knižnice nájdete tu.

3. Inštalácia

Pridajme Zákazník a Triedy adries:

public class Customer {private Integer id; súkromné ​​meno reťazca; adresa súkromnej adresy; // štandardné getre a setre} verejná trieda Adresa {private String locality; súkromné ​​mesto String; // štandardné getre a setre}

Ďalej vám pomôžeme Zákazník a Zoznam prípady pripravené na testovanie našej implementácie:

Zákazník zákazník1 = nový Zákazník (1, „Daniel“, „lokalita1“, „mesto1“); Zákazník customer2 = nový zákazník (2, „Fredrik“, „local22“, „city2“); Zákazník customer3 = nový zákazník (3, „Kyle“, „local33“, „city3“); Zákazník customer4 = nový zákazník (4, „Bob“, „local4“, „city4“); Zákazník customer5 = nový zákazník (5, „Cat“, „local5“, „city5“); Zákazník customer6 = nový Zákazník (6, „John“, „local6“, „city6“); Zoznam list1 = Arrays.asList (zákazník1, zákazník2, zákazník3); Zoznam list2 = Arrays.asList (zákazník4, zákazník5, zákazník6); Zoznam list3 = Arrays.asList (customer1, customer2); Zoznam linkedList1 = nový LinkedList (zoznam1);

4. CollectionUtils

Prejdime si niektoré z najbežnejších metód v Apache Commons CollectionUtils trieda.

4.1. Pridávanie iba nenulových prvkov

Môžeme použiť AddIgnoreNull aplikácie CollectionUtils metóda na pridanie iba nenulových prvkov do poskytnutej kolekcie.

Prvým argumentom tejto metódy je kolekcia, do ktorej chceme pridať prvok, a druhým argumentom je prvok, ktorý chceme pridať:

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

Všimnite si, že nulový nebol pridaný do zoznamu.

4.2. Zoradenie zoznamov

Môžeme použiť zhromaždiť metóda na zhromaždenie dvoch už zoradených zoznamov. Táto metóda vezme obidva zoznamy, ktoré chceme zlúčiť, ako argumenty a vráti jediný zoradený zoznam:

@Test public void givenTwoSortedLists_whenCollated_thenSorted () {Zoznam zoradenýList = CollectionUtils.collate (zoznam1, zoznam2); assertEquals (6, SortList.size ()); assertTrue (triedenýList.get (0) .getName (). equals ("Bob")); assertTrue (triedenýList.get (2) .getName (). equals ("Daniel")); }

4.3. Transformácia objektov

Môžeme použiť transformovať metóda na transformáciu objektov triedy A na rôzne objekty triedy B. Táto metóda prevezme zoznam objektov triedy A a a transformátor ako argumenty.

Výsledkom tejto operácie je zoznam objektov triedy B:

@Test public void givenListOfCustomers_whenTransformed_thenListOfAddress () {Collection addressCol = CollectionUtils.collect (list1, new Transformer () {public Address transform (Customer customer) {return customer.getAddress ();}}); Zoznam addressList = nový ArrayList (addressCol); assertTrue (addressList.size () == 3); assertTrue (addressList.get (0) .getLocality (). equals ("locality1")); }

4.4. Filtrovanie objektov

Použitím filter zo zoznamu môžeme odstrániť objekty, ktoré nespĺňajú danú podmienku.Metóda berie zoznam ako prvý argument a a Predikát ako jeho druhý argument.

The filterInverzne metóda robí opak. Odstráni objekty zo zoznamu, keď Predikát vracia sa pravda.

Oboje filter a filterInverzne návrat pravda ak bol vstupný zoznam upravený, t. j. ak bol zo zoznamu odfiltrovaný aspoň jeden objekt:

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

Môžeme použiť vyberte a selectRejected ak chceme, aby sa výsledný zoznam vrátil skôr ako boolovský príznak.

4.5. Kontroluje sa, či nie je prázdne

IsNotEmpty Táto metóda je veľmi užitočná, keď chceme skontrolovať, či je v zozname aspoň jeden prvok. Ďalším spôsobom kontroly toho istého je:

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

Aj keď vyššie uvedený riadok kódu robí to isté, CollectionUtils.isNotEmpty udržuje náš kód čistejší:

@Test public void givenNonEmptyList_whenCheckedIsNotEmpty_thenTrue () {assertTrue (CollectionUtils.isNotEmpty (zoznam1)); }

The je prázdny robí opak. Kontroluje, či je daný zoznam nulový alebo či v zozname nie je nula prvkov:

Zoznam emptyList = nový ArrayList (); Zoznam nullList = null; assertTrue (CollectionUtils.isEmpty (nullList)); assertTrue (CollectionUtils.isEmpty (emptyList));

4.6. Kontrola začlenenia

Môžeme použiť isSubCollection skontrolovať, či je kolekcia obsiahnutá v inej kolekcii. isSubCollection vezme dve kolekcie ako argumenty a vráti pravda ak je prvá zbierka podskupinou druhej zbierky:

@Test public void givenCustomerListAndASubcollection_whenChecked_thenTrue () {assertTrue (CollectionUtils.isSubCollection (list3, list1)); }

Kolekcia je čiastkovou kolekciou inej kolekcie, ak je počet výskytov objektu v prvej kolekcii menší alebo rovný počtu výskytov v druhej kolekcii.

4.7. Priesečník zbierok

Môžeme použiť CollectionUtils.intersection metóda na získanie priesečníka dvoch zbierok. Táto metóda obsahuje dve kolekcie a vracia kolekciu prvkov, ktoré sú bežné v oboch vstupných kolekciách:

@Test public void givenTwoLists_whenIntersected_thenCheckSize () {Collection intersection = CollectionUtils.intersection (list1, list3); assertTrue (intersection.size () == 2); }

Počet výskytov prvku vo výslednej kolekcii je minimálny počet výskytov prvkov v každej z daných kolekcií.

4.8. Odčítanie zbierok

CollectionUtils.subtract vezme ako vstup dve kolekcie a vráti kolekciu, ktorá obsahuje prvky, ktoré sú v prvej kolekcii, ale nie v druhej kolekcii:

@Test public void givenTwoLists_whenSubtracted_thenCheckElementNotPresentInA () {Výsledok kolekcie = CollectionUtils.subtract (zoznam1, zoznam3); assertFalse (result.contains (customer1)); }

Počet výskytov kolekcie vo výsledku je počet výskytov prvej kolekcie mínus počet výskytov druhej kolekcie.

4.9. Únia zbierok

CollectionUtils.union vykoná spojenie dvoch zbierok a vráti kolekciu, ktorá obsahuje všetky prvky, ktoré sa nachádzajú v prvej alebo druhej kolekcii.

@Test public void givenTwoLists_whenUnlined_thenCheckElementPresentInResult () {Collection union = CollectionUtils.union (list1, list2); assertTrue (union.contains (customer1)); assertTrue (union.contains (customer4)); }

Počet výskytov prvku vo výslednej kolekcii je maximum, koľkokrát sa vyskytuje v každej z daných kolekcií.

5. Záver

A sme hotoví.

Prešli sme niektorými z bežne používaných metód CollectionUtils - čo je veľmi užitočné, aby sme sa vyhli vareniu pri práci so zbierkami v našich projektoch Java.

Ako obvykle je kód k dispozícii na GitHub.

Ďalšie » Zbierky Apache Commons MapUtils « Predchádzajúce zbierky Apache Commons BidiMap

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