Útmutató az Apache Commons gyűjtemények gyűjteményéhez

Ez a cikk egy sorozat része: • Apache Commons Gyűjtemények Táska

• Apache Commons Gyűjtemények SetUtils

• Apache Commons Gyűjtemények OrderedMap

• Apache Commons Gyűjtemények BidiMap

• Útmutató az Apache Commons Gyűjtemények CollectionUtils-hoz (aktuális cikk) • Apache Commons Gyűjtemények MapUtils

• Útmutató az Apache Commons CircularFifoQueue-hoz

1. Áttekintés

Egyszerűen fogalmazva: ApacheCollectionUtils hasznos módszereket biztosít a közös műveletekhez, amelyek a felhasználási esetek széles skáláját fedik le, és segítenek elkerülni a kazán kód kódírását. A könyvtár a régebbi JVM kiadásokat célozza meg, mert jelenleg hasonló funkciókat biztosítanak a Java 8-asok Folyam API.

2. Maven-függőségek

A következő függőséget hozzá kell adnunk ahhoz, hogy elindulhassunk CollectionUtils:

 org.apache.commons commons-gyűjtemények4 4.1 

A könyvtár legújabb verziója itt található.

3. Beállítás

Tegyük hozzá Vevő és Címosztályok:

public class ügyfél {private Integer id; privát karakterlánc neve; privát cím címe; // standard getters and setters} public class Cím {private String locality; privát String város; // szabványos mérőeszközök és beállítók}

A következőket is kéznél tartjuk Vevő és Lista példányok készen állnak a megvalósításunk tesztelésére:

Ügyfél ügyfél1 = új Ügyfél (1, "Dániel", "helység1", "város1"); Ügyfél ügyfél2 = új Ügyfél (2, "Fredrik", "helység2", "város2"); Ügyfél vásárló3 = új Ügyfél (3, "Kyle", "helység3", "város3"); Ügyfél ügyfél4 = új Ügyfél (4, "Bob", "helység4", "város4"); Ügyfél vásárló5 = új Ügyfél (5, "Macska", "helység5", "város5"); Ügyfél vásárló6 = új Ügyfél (6, "John", "helység6", "város6"); List list1 = Tömbök.asList (ügyfél1, ügyfél2, ügyfél3); List list2 = Tömbök.asList (ügyfél4, ügyfél5, ügyfél6); List list3 = Tömbök.asList (ügyfél1, ügyfél2); List linkList1 = új LinkedList (list1);

4. CollectionUtils

Menjünk át a legtöbbet használt módszereken Apache Commons CollectionUtils osztály.

4.1. Csak nem semleges elemek hozzáadása

Tudjuk használni A CollectionUtils addIgnoreNull módszer, amely csak nem null elemeket ad hozzá egy megadott gyűjteményhez.

Az első argumentum ehhez a módszerhez az a gyűjtemény, amelyhez hozzá akarjuk adni az elemet, a második argumentum pedig az az elem, amelyet hozzá akarunk adni:

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

Figyeljük meg, hogy a nulla nem került fel a listára.

4.2. Listák összegyűjtése

Tudjuk használni összevonni módszer két már rendezett lista összeállításához. Ez a módszer mindkét listát, amelyet egyesíteni akarunk, argumentumként veszi fel, és egyetlen rendezett listát ad vissza:

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

4.3. Objektumok átalakítása

Használhatjuk a átalakul módszer az A osztály objektumainak átalakítására a B osztály különböző objektumaivá. Ez a módszer felsorolja az A és a osztály objektumainak listáját transzformátor mint érvek.

Ennek a műveletnek az eredménye a B osztályú objektumok listája:

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

4.4. Objektumok szűrése

Használata szűrő eltávolíthatunk egy listáról olyan objektumokat, amelyek nem felelnek meg egy adott feltételnek.A módszer első argumentumként a listát veszi fel, és a Állítmány második érvként.

A filterInverse módszer az ellenkezőjét teszi. Eltávolítja az objektumokat a listáról, amikor a Állítmány true-val tér vissza.

Mindkét szűrő és filterInverse Visszatérés igaz ha a beviteli listát módosították, azaz ha legalább egy objektum kiszűrődött a listából:

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

Tudjuk használni válassza és selectRejected ha azt akarjuk, hogy a kapott lista visszatérjen logikai zászló helyett.

4.5. A Nem üres elem ellenőrzése

Az isNotEmpty A módszer nagyon hasznos, ha ellenőrizni akarjuk, hogy van-e legalább egy elem egy listában. Ugyanez ellenőrzésének másik módja:

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

Bár a fenti kódsor ugyanezt teszi, CollectionUtils.isNotEmpty tisztábban tartja kódunkat:

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

A üres az ellenkezőjét teszi. Ellenőrzi, hogy az adott lista null-e, vagy nincs null elem a listában:

List emptyList = new ArrayList (); List nullList = null; assertTrue (CollectionUtils.isEmpty (nullList)); assertTrue (CollectionUtils.isEmpty (emptyList));

4.6. A befogadás ellenőrzése

Tudjuk használni isSubCollection annak ellenőrzése, hogy van-e gyűjtemény egy másik gyűjteményben. isSubCollection két gyűjteményt vesz fel argumentumként, és visszatér igaz ha az első gyűjtemény a második gyűjtemény részgyűjteménye:

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

A gyűjtemény egy másik gyűjtemény részgyűjteménye, ha egy objektum előfordulása az első gyűjteményben kisebb vagy egyenlő a második gyűjteményben való előfordulás számával.

4.7. Gyűjtemények metszéspontja

Tudjuk használni CollectionUtils.intersection módszer két gyűjtemény metszéspontjának megszerzéséhez. Ez a módszer két gyűjteményt vesz fel, és olyan elemek gyűjteményét adja vissza, amelyek mindkét bemeneti gyűjteményben közösek:

@Test public void givenTwoLists_whenIntersected_thenCheckSize () {Collection intersection = CollectionUtils.intersection (list1, list3); assertTrue (metszéspont.méret () == 2); }

Egy elem előfordulásának száma a kapott gyűjteményben minimálisan annyi, ahányszor az adott gyűjteményben előfordul.

4.8. Gyűjtemények kivonása

CollectionUtils.subtract két gyűjteményt vesz be inputként, és olyan gyűjteményt ad vissza, amely olyan elemeket tartalmaz, amelyek az első gyűjteményben vannak, a második gyűjteményben azonban nem:

@Test public void givenTwoLists_whenSubtracted_thenCheckElementNotPresentInA () {Gyűjtemény eredménye = CollectionUtils.subtract (list1, list3); assertFalse (eredmény.tartalmaz (ügyfél1)); }

A gyűjtemény előfordulásának száma az eredményben annyi, mint ahányszor az első gyűjteményben előfordul, mínusz a második gyűjteményben.

4.9. Gyűjtemények Uniója

CollectionUtils.union két gyűjtemény egyesítését végzi, és egy olyan gyűjteményt ad vissza, amely tartalmazza az összes elemet, amely az első vagy a második gyűjteményben található.

@Test public void givenTwoLists_whenUnioned_thenCheckElementPresentInResult () {Collection union = CollectionUtils.union (list1, list2); assertTrue (union.contains (ügyfél1)); assertTrue (union.contains (customer4)); }

Annak száma, hogy egy elem mekkora előfordulást eredményez a keletkező gyűjteményben, az a maximális szám, ahányszor egy adott gyűjteményben előfordul.

5. Következtetés

És készen vagyunk.

Végignéztük a CollectionUtils - ami nagyon hasznos a kazánlemez elkerülése érdekében, amikor Java-projektjeink gyűjteményeivel dolgozunk.

Szokás szerint a kód elérhető a GitHubon.

Következő » Apache Commons Gyűjtemények MapUtils « Korábbi Apache Commons Gyűjtemények BidiMap