Premeniť pole primitívov na zoznam

1. Prehľad

V tomto krátkom návode ukážeme si, ako previesť pole primitívov na a Zoznam predmetov zodpovedajúceho typu. Typicky by sme sa mohli pokúsiť použiť autoboxing v Jave. Ako si však ukážeme v nasledujúcej časti, naša intuícia fungovania autoboxu môže byť často chybná.

2. Problém

Začnime definíciou problému. Máme množstvo primitívov (int []), a chceme konvertovať toto pole na a Zoznam (Zoznam). Intuitívnym prvým pokusom môže byť:

int [] vstup = nový int [] {1,2,3,4}; Zoznam výstupov = Arrays.asList (vstup);

Bohužiaľ toto sa nezkompiluje z dôvodu nekompatibility typu. Možno by sme čakali, že autobox bude pracovať s poľami primitívov. Táto inštinktívna viera však nie je pravdivá.

Autoboxing sa deje iba pre jeden prvok (napríklad z int do Celé číslo). Neexistuje automatická konverzia z poľa primitívnych typov na pole ich krabicových referenčných typov (napríklad z int [] do Celé číslo []).

Začnime implementovať niekoľko riešení tohto problému.

3. Iterácia

Keďže autoboxing pracuje s jednotlivými primitívnymi prvkami, jednoduchým riešením je iba iterovať nad prvkami poľa a pridať ich do súboru Zoznam jeden za druhým:

int [] vstup = nový int [] {1,2,3,4}; Zoznamový výstup = nový ArrayList (); pre (int hodnota: vstup) {output.add (hodnota); }

Problém sme vyriešili, ale riešenie je dosť podrobné. Týmto sa dostávame k ďalšej implementácii.

4. Prúdy

Od verzie Java 8 môžeme používať Prúd API. Jednoriadkové riešenie môžeme poskytnúť pomocou a Prúd:

int [] vstup = nový int [] {1,2,3,4}; Zoznamový výstup = Arrays.stream (input) .boxed (). Collect (Collectors.toList ());

Prípadne môžeme použiť IntStream:

int [] vstup = nový int [] {1,2,3,4}; Zoznamový výstup = IntStream.of (vstup) .boxed (). Collect (Collectors.toList ());

To určite vyzerá oveľa krajšie. Ďalej sa pozrieme na niekoľko externých knižníc.

5. Guava

Knižnica Guava poskytuje obal okolo tohto problému. Začnime pridaním závislosti Maven:

 Balík com.google.guava guava 29.0-jre 

Môžeme použiť Ints.asList (), s podobnými triedami úžitkovosti pre ostatné primitívne typy:

int [] vstup = nový int [] {1,2,3,4}; Zoznam výstupov = Ints.asList (vstup);

6. Apache Commons

Ďalšou knižnicou je Apache Commons Lang. Opäť pridajme závislosť Maven pre túto knižnicu:

 org.apache.commons commons-lang3 3.10 

Presnejšie, používame ArrayUtils trieda:

int [] vstup = nový int [] {1,2,3,4}; Celé číslo [] outputBoxed = ArrayUtils.toObject (vstup); Zoznam výstupov = Arrays.asList (outputBoxed);

7. Záver

Teraz máme v našej súprave nástrojov niekoľko možností, ako previesť rad primitívnych nástrojov na a Zoznam. Ako sme videli, autobox sa deje iba pre jednotlivé prvky. V tomto tutoriáli sme videli niekoľko riešení na použitie konverzie.

Celý zdrojový kód článku je ako vždy k dispozícii na GitHub.


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