Vodič za Apache Commons Collections CollectionUtils
• 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