Zipsovanie zbierok v Jave

1. Úvod

V tomto tutoriáli si ukážeme, ako spojiť dve kolekcie do jednej logickej kolekcie.

PSČ" prevádzka sa mierne líši od štandardného „concat“ alebo „merge“. Zatiaľ čo operácie „concat“ alebo „merge“ jednoducho pridajú novú kolekciu na konci existujúcej kolekcie, „PSČ" operácia vezme prvok z každej kolekcie a skombinuje ich.

Základná knižnica nepodporuje „PSČ" implicitne, ale určite existujú knižnice tretích strán, ktoré túto užitočnú operáciu obsahujú.

Zvážte dva zoznamy, jeden s menami ľudí, druhý s ich vekom.

Názvy zoznamu = new ArrayList (Arrays.asList ("John", "Jane", "Jack", "Dennis")); Zoznam vekových skupín = nový ArrayList (Arrays.asList (24, 25, 27));

Po zipsovaní skončíme s pármi mien a veku zostavenými z zodpovedajúcich prvkov z týchto dvoch zbierok.

2. Používanie Java 8 IntStream

Pomocou jadra Java by sme mohli generovať indexy pomocou IntStream a potom pomocou nich extrahujte zodpovedajúce prvky z dvoch zbierok:

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

3. Používanie prúdov Guava

Od verzie 21 poskytuje Google Guava metódu pomocného zipu v Prúdy trieda. Tým sa odstráni všetok ruch pri vytváraní a mapovaní indexov a zníži sa syntax vstupov a operácií:

Prúdy .zip (names.stream (), age.stream (), (meno, vek) -> meno + ":" + vek) // ...

4. Používanie jOOλ(jOOL)

jOOL tiež poskytuje niektoré z fascinujúcich doplnkov k Java 8 Lambda a s podporou Tuple1 do Tuple16, operácia zip sa stáva oveľa zaujímavejšou:

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

To prinesie výsledok a Sekv obsahujúce Tice zo zipsových prvkov:

(n-tica (1, „a“), n-tica (2, „b“), n-tica (3, „c“))

jOOL zips metóda poskytuje flexibilitu pri poskytovaní vlastnej transformačnej funkcie:

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

alebo ak si niekto želá zapnúť iba zips, môže ísť s zipWithIndex metóda poskytovaná JOOL:

Sekvencia ("a", "b", "c"). ZipWithIndex ();

5. Záver

V tomto rýchlom výučbe sme sa pozreli na to, ako vykonávať PSČ prevádzka.

Ako vždy, príklady kódov v článku nájdete na GitHub.


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