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.