Gyűjtemények tömörítése Java-ban

1. Bemutatkozás

Ebben az oktatóanyagban bemutatjuk, hogyan lehet két gyűjteményt egyetlen logikai gyűjteménybe tömöríteni.

A "postai irányítószám" a művelet kissé eltér a szokásos „összevonástól” vagy „egyesítéstől”. Míg a „összefésülés” vagy „egyesítés” műveletek egyszerűen hozzáadják az új gyűjteményt a meglévő gyűjtemény végéhez,postai irányítószám" A művelet minden egyes gyűjteményből kivesz egy elemet, és egyesíti őket.

Az alapkönyvtár nem támogatja apostai irányítószám" hallgatólagosan, de minden bizonnyal vannak harmadik féltől származó könyvtárak, amelyek tartalmazzák ezt a hasznos műveletet.

Vegyünk két listát, az egyiknek neve van, a másik az életkorukat tartalmazza.

Listanevek = new ArrayList (Arrays.asList ("John", "Jane", "Jack", "Dennis"); Korosztályok listája = new ArrayList (Arrays.asList (24, 25, 27));

A cipzár után a két gyűjtemény megfelelő elemeiből összeállított név-életkor párokhoz jutunk.

2. A Java 8 használata IntStream

Az alapvető Java használatával indexeket generálhatunk a IntStream majd ezeket felhasználva nyerje ki a megfelelő elemeket két gyűjteményből:

IntStream .range (0, Math.min (nevek.méret (), korosztály.méret ())) .mapToObj (i -> nevek.get (i) + ":" + korosztályok.get (i)) //. ..

3. A Guava Streams használata

A 21-es verziótól kezdve a Google Guava egy zip segítő módszert biztosít a Patakok osztály. Ez eltávolítja az indexek létrehozásának és leképezésének minden felhajtását, és csökkenti a szintaxist a bemenetekre és a műveletekre:

Patakok .zip (nevek.folyam (), korok.folyam (), (név, életkor) -> név + ":" + kor) // ...

4. Használata jOOλ(jOOL)

jOOL a Java 8 Lambda alkalmazással kapcsolatos néhány érdekes kiegészítőt is kínálja, és a Tuple1 nak nek Tuple16, a zip művelet sokkal érdekesebbé válik:

Seq .of ("John", "Jane", "Dennis") .zip (Seq.of (24,25,27));

Ez eredményt ad a Szekvencia tartalmazó Tollok cipzáras elemekből:

(tuple (1, "a"), tuple (2, "b"), tuple (3, "c"))

jOOL cipzárja A módszer rugalmasságot biztosít az egyedi átalakítási funkció biztosításához:

(1, 2, 3) .zip (Seq. ("A", "b", "c"), (x, y) -> x + ":" + y);

vagy ha valaki csak indexszel akar tömöríteni, akkor a zipWithIndex által biztosított módszer jOOL:

Seq.of ("a", "b", "c"). ZipWithIndex ();

5. Következtetés

Ebben a gyors bemutatóban áttekintettük a postai irányítószám művelet.

Mint mindig, a cikkben szereplő kód példák megtalálhatók a GitHubon.