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.