Zipping kolekcije u Javi

1. Uvod

U ovom uputstvu ilustrirat ćemo kako komprimirati dvije zbirke u jednu logičku zbirku.

"patentni zatvarač " postupak se malo razlikuje od standardnog "concat" ili "merge". Iako će operacije "concat" ili "spajanje" jednostavno dodati novu zbirku na kraju postojeće zbirke, "patentni zatvarač " operacija će uzeti element iz svake zbirke i kombinirati ih.

Osnovna knjižnica ne podržava “patentni zatvarač " implicitno, ali sigurno postoje biblioteke trećih strana koje imaju ovu korisnu operaciju.

Razmotrite dva popisa, jedan s imenima ljudi, drugi sadrži njihovu dob.

Imena popisa = novi ArrayList (Arrays.asList ("John", "Jane", "Jack", "Dennis")); Popis dobnih skupina = novi ArrayList (Arrays.asList (24, 25, 27));

Nakon komprimiranja, na kraju imamo parove imena-doba koji su konstruirani od odgovarajućih elemenata iz te dvije zbirke.

2. Korištenje Jave 8 IntStream

Koristeći jezgru Java, mogli bismo generirati indekse pomoću IntStream a zatim ih upotrijebite za izdvajanje odgovarajućih elemenata iz dvije zbirke:

IntStream .range (0, Math.min (names.size (), age.size ())) .mapToObj (i -> names.get (i) + ":" + age.get (i)) //. ..

3. Korištenje potoka Guava

Počevši od verzije 21, Google Guava nudi zip pomoćnu metodu u Potoci razred. Ovo uklanja svu gužvu oko stvaranja i mapiranja indeksa i smanjuje sintaksu na ulaze i operacije:

Streamovi .zip (names.stream (), age.stream (), (name, age) -> name + ":" + age) // ...

4. Korištenje jOOλ(jOOL)

jOOL također nudi neke od fascinantnih dodataka nad Javom 8 Lambda i uz podršku Korijen1 do Korpa16, zip operacija postaje puno zanimljivija:

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

To će proizvesti rezultat a Sljedeće koji sadrže Korijeni elemenata sa patentnim zatvaračem:

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

jOOL-ov zip metoda daje fleksibilnost za pružanje prilagođene funkcije transformacije:

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

ili ako netko želi zip samo s indeksom, može ići s zipWithIndex metoda koju pruža jOOL:

Dalje od ("a", "b", "c"). ZipWithIndex ();

5. Zaključak

U ovom smo brzom vodiču pogledali kako izvesti zip operacija.

Kao i uvijek, primjeri koda u članku mogu se naći na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found