Zipping samlinger i Java

1. Introduksjon

I denne opplæringen vil vi illustrere hvordan du kan pakke to samlinger i en logisk samling.

glidelås" operasjonen er litt forskjellig fra standard "concat" eller "flette". Mens "concat" eller "flette" -operasjonene ganske enkelt vil legge til den nye samlingen på slutten av den eksisterende samlingen, "glidelås" operasjonen vil ta et element fra hver samling og kombinere dem.

Kjernebiblioteket støtter ikke “glidelås" implisitt, men det er absolutt tredjepartsbiblioteker som har denne nyttige operasjonen.

Tenk på to lister, den ene har navn på personer, den andre inneholder alderen.

Listenavn = ny ArrayList (Arrays.asList ("John", "Jane", "Jack", "Dennis")); Listealder = ny ArrayList (Arrays.asList (24, 25, 27));

Etter glidelås, ender vi opp med navn-alderspar konstruert av tilsvarende elementer fra de to samlingene.

2. Bruke Java 8 IntStream

Ved hjelp av Java-kjerne kunne vi generere indekser ved hjelp av IntStream og bruk dem deretter til å trekke ut tilsvarende elementer fra to samlinger:

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

3. Bruke Guava Streams

Fra og med versjon 21 gir Google Guava en zip-hjelpemetode i Strømmer klasse. Dette fjerner alt oppstyret med å lage og kartlegge indekser og reduserer syntaksen til innganger og operasjoner:

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

4. Bruke jOOλ(jOOL)

JOL gir også noen av de fascinerende tilleggene over Java 8 Lambda, og med støtte fra Tuple1 til Tuple16, zip-operasjonen blir mye mer interessant:

Sekv. Av ("John", "Jane", "Dennis") .zip (Sekv. Av (24,25,27));

Dette vil gi et resultat av en Sekv inneholder Tuples av glidelåser:

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

jOOLs glidelås metoden gir fleksibiliteten til å tilby tilpasset transformasjonsfunksjon:

Sekvens av (1, 2, 3) .zip (Sekvens av ("a", "b", "c"), (x, y) -> x + ":" + y);

eller hvis man bare ønsker å zip med indeks, kan han gå med zipWithIndex metoden levert av JOL:

Sekvens av ("a", "b", "c"). ZipWithIndex ();

5. Konklusjon

I denne raske opplæringen har vi sett på hvordan vi skal utføre glidelås operasjon.

Som alltid kan kodeeksemplene i artikkelen finnes på GitHub.


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