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.