Vodič za Apache Commons Collections CollectionUtils

Ovaj je članak dio serije: • Torba za zbirke Apache Commons

• SetUtils zbirki Apache Commons

• Zbirke Apache Commons OrderedMap

• Zbirke Apache Commons BidiMap

• Vodič za Apache Commons Collections CollectionUtils (trenutni članak) • Apache Commons Zbirke MapUtils

• Vodič za Apache Commons CircularFifoQueue

1. Pregled

Jednostavno rečeno, ApačiCollectionUtils pruža korisne metode za uobičajene operacije koje pokrivaju širok raspon slučajeva korištenja i pomaže u izbjegavanju pisanja koda. Biblioteka cilja starija izdanja JVM-a jer trenutno slične funkcije pružaju Java 8-e Stream API.

2. Ovisnosti Mavena

Moramo dodati sljedeću ovisnost da bismo započeli Zbirka korisnih predmeta:

 org.apache.commons commons-collection4 4.1 

Najnoviju verziju knjižnice možete pronaći ovdje.

3. Postavljanje

Dodajmo Kupac i Adresne klase:

kupac javne klase {private Integer id; privatni naziv niza; adresa privatne adrese; // standardni getteri i postavljači} javna klasa Adresa {private String locality; privatni gudački grad; // standardni geteri i postavljači}

Također ćemo imati pri ruci sljedeće Kupac i Popis instance spremne za testiranje naše implementacije:

Kupac kupac1 = novi kupac (1, "Daniel", "locality1", "city1"); Kupac kupac2 = novi kupac (2, "Fredrik", "lokalitet2", "grad2"); Kupac kupac3 = novi kupac (3, "Kyle", "locality3", "city3"); Kupac kupac4 = novi kupac (4, "Bob", "locality4", "city4"); Kupac kupac5 = novi kupac (5, "Mačka", "lokalitet5", "grad5"); Kupac kupac6 = novi kupac (6, "John", "locality6", "city6"); Lista list1 = Arrays.asList (kupac1, kupac2, kupac3); Lista list2 = Arrays.asList (kupac4, kupac5, kupac6); Lista popisa3 = Arrays.asList (kupac1, kupac2); Popis linkedList1 = novi LinkedList (popis1);

4. CollectionUtils

Prođimo kroz neke od najčešće korištenih metoda u Apache Commons CollectionUtils razred.

4.1. Dodavanje samo ne-null elemenata

Možemo koristiti AddIgnoreNull zbirkeUtils metoda za dodavanje samo ne-null elemenata u navedenu zbirku.

Prvi argument ove metode je zbirka kojoj želimo dodati element, a drugi je element koji želimo dodati:

@Test javna praznina givenList_whenAddIgnoreNull_thenNoNullAdded () {CollectionUtils.addIgnoreNull (list1, null); assertFalse (list1.contens (null)); }

Primijetite da null nije dodan na popis.

4.2. Sabiranje popisa

Možemo koristiti usporediti metoda za uspoređivanje dva već sortirana popisa. Ova metoda uzima oba argumenta koja želimo spojiti kao argumente i vraća jedan sortirani popis:

@Test javna praznina givenTwoSortedLists_whenCollated_thenSorted () {List sortedList = CollectionUtils.collate (list1, list2); assertEquals (6, sortedList.size ()); assertTrue (sortedList.get (0) .getName (). jednako ("Bob")); assertTrue (sortedList.get (2) .getName (). jednako ("Daniel")); }

4.3. Transformiranje objekata

Možemo koristiti transformirati metoda za pretvaranje objekata klase A u različite objekte klase B. Ova metoda uzima popis objekata klase A i a transformator kao argumenti.

Rezultat ove operacije je popis objekata klase B:

@Test javna praznina givenListOfCustomers_whenTransformed_thenListOfAddress () {Address addressCol = CollectionUtils.collect (list1, new Transformer () {transformacija javne adrese (kupac kupac) {return customer.getAddress ();}}); Popis addressList = novi ArrayList (addressCol); assertTrue (addressList.size () == 3); assertTrue (addressList.get (0) .getLocality (). equals ("locality1")); }

4.4. Filtriranje objekata

Koristeći filtar s popisa možemo ukloniti objekte koji ne zadovoljavaju zadani uvjet.Metoda uzima popis kao prvi argument i a Predikat kao svoj drugi argument.

The filterInverse metoda radi suprotno. Uklanja predmete sa popisa kada Predikat vraća istina.

Oba filtar i filterInverse povratak pravi ako je popis unosa izmijenjen, tj. ako je barem jedan objekt filtriran s popisa:

@Test javna praznina givenCustomerList_WhenFiltered_thenCorrectSize () {boolean isModified = CollectionUtils.filter (linkedList1, new Predicate () {public boolean evaluacija (kupac kupac) {return Arrays.asList ("Daniel", "Kyle"). Sadrži (customer.getName ( ));}}); assertTrue (linkedList1.size () == 2); }

Možemo koristiti Odaberi i selectRejected ako želimo da se vrati rezultantni popis, a ne booleova zastava.

4.5. Provjera nije prazno

IsNotEmpty metoda je vrlo zgodna kada želimo provjeriti postoji li barem jedan element na popisu. Drugi način provjere istog je:

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

Iako gornji redak koda radi isto, CollectionUtils.isNotEmpty čuva naš kod čišćim:

@Test javna praznina givenNonEmptyList_whenCheckedIsNotEmpty_thenTrue () {assertTrue (CollectionUtils.isNotEmpty (list1)); }

The prazno je čini suprotno. Provjerava je li zadani popis ništavan ili na popisu ima nula elemenata:

Popis emptyList = novi ArrayList (); Popis nullList = null; assertTrue (CollectionUtils.isEmpty (nullList)); assertTrue (CollectionUtils.isEmpty (emptyList));

4.6. Provjera uključenosti

Možemo koristiti isSubCollection da provjeri je li zbirka sadržana u drugoj zbirci. isSubCollection uzima dvije zbirke kao argumente i vraća pravi ako je prva zbirka podzbirka druge zbirke:

@Test javna praznina givenCustomerListAndASubcollection_whenChecked_thenTrue () {assertTrue (CollectionUtils.isSubCollection (list3, list1)); }

Zbirka je podzbirka druge zbirke ako je broj puta koji se objekt dogodi u prvoj zbirci manji ili jednak broju puta u drugoj zbirci.

4.7. Raskrižje zbirki

Možemo koristiti CollectionUtils.prekrižanje metoda za dobivanje presjeka dviju zbirki. Ova metoda uzima dvije zbirke i vraća kolekciju elemenata koji su česti u obje ulazne zbirke:

@Test javna praznina givenTwoLists_whenIntersected_thenCheckSize () {Sjecište kolekcije = CollectionUtils.intersection (list1, list3); assertTrue (intersection.size () == 2); }

Broj pojavljivanja elementa u rezultirajućoj zbirci najmanje je broj pojavljivanja u svakoj od zadanih zbirki.

4.8. Oduzimanje zbirki

CollectionUtils.oduzmi uzima dvije zbirke kao ulaz i vraća kolekciju koja sadrži elemente koji se nalaze u prvoj zbirci, ali ne i u drugoj zbirci:

@Test javna praznina givenTwoLists_whenSubtracted_thenCheckElementNotPresentInA () {Rezultat kolekcije = CollectionUtils.subtract (list1, list3); assertFalse (result.contens (kupac1)); }

Broj pojavljivanja zbirke u rezultatu je broj pojavljivanja u prvoj zbirci umanjen za broj ponovljenih pojavljivanja u drugoj zbirci.

4.9. Sindikat kolekcija

CollectionUtils.union vrši sjedinjavanje dviju zbirki i vraća zbirku koja sadrži sve elemente koji se nalaze u prvoj ili drugoj zbirci.

@Test javna praznina givenTwoLists_whenUnioned_thenCheckElementPresentInResult () {Collection union = CollectionUtils.union (list1, list2); assertTrue (union.contens (kupac1)); assertTrue (union.contens (customer4)); }

Broj pojavljivanja elementa u rezultirajućoj zbirci maksimalan je broj pojavljivanja u svakoj od zadanih zbirki.

5. Zaključak

I gotovi smo.

Prošli smo kroz neke od najčešće korištenih metoda CollectionUtils - što je vrlo korisno za izbjegavanje uzorka kada radimo s kolekcijama u našim Java projektima.

Kao i obično, kod je dostupan na GitHub-u.

Sljedeći » Apache Commons Zbirke MapUtils « Prethodne zbirke Apache Commons BidiMap