Lynlåse samlinger i Java

1. Introduktion

I denne vejledning illustrerer vi, hvordan man zip to samlinger i en logisk samling.

Det "lynlås ” betjening er lidt anderledes end standard "concat" eller "flet". Mens operationerne "concat" eller "flet" blot tilføjer den nye samling i slutningen af ​​den eksisterende samling, "lynlås ” operation tager et element fra hver samling og kombinerer dem.

Kernebiblioteket understøtter ikke “lynlås ” implicit, men der er bestemt tredjepartsbiblioteker, der indeholder denne nyttige operation.

Overvej to lister, den ene har navne på mennesker, den anden indeholder deres alder.

Liste navne = ny ArrayList (Arrays.asList ("John", "Jane", "Jack", "Dennis")); Liste aldre = ny ArrayList (Arrays.asList (24, 25, 27));

Efter lynlåsning ender vi med navnealderpar konstrueret af tilsvarende elementer fra disse to samlinger.

2. Brug af Java 8 IntStream

Ved hjælp af core Java kunne vi generere indekser ved hjælp af IntStream og brug dem derefter til at udtrække tilsvarende elementer fra to samlinger:

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

3. Brug af Guava Streams

Fra og med version 21 giver Google Guava en zip-hjælpemetode i Strømme klasse. Dette fjerner alt besværet med at oprette og kortlægge indekser og reducerer syntaksen til input og operationer:

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

4. Brug jOOλ(jOOL)

JOL giver også nogle af de fascinerende tilføjelser over Java 8 Lambda og med støtte fra Tuple1 til Tuple16, zip-operationen bliver meget mere interessant:

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

Dette vil give et resultat af en Sekv indeholdende Tuples af lynlåseelementer:

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

jOOLs lynlås metode giver fleksibilitet til at levere tilpasset transformation funktion:

Sekvens. Af (1, 2, 3). Zip (Sekvens af ("a", "b", "c"), (x, y) -> x + ":" + y);

eller hvis man kun ønsker at zip med indeks, kan han gå med zipWithIndex metode leveret af JOL:

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

5. Konklusion

I denne hurtige vejledning så vi, hvordan vi udførte lynlås operation.

Som altid kan kodeeksemplerne i artiklen findes på GitHub.


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