Konvertálja a primitívek tömbjét listává

1. Áttekintés

Ebben a rövid bemutatóban megmutatjuk, hogyan lehet egy primitív tömböt átalakítani a-vá Lista a megfelelő típusú tárgyakból. Általában megpróbálhatjuk az autoboxing használatát a Java-ban. Azonban, amint azt a következő szakaszban látni fogjuk, az autoboxolás működésével kapcsolatos intuíciónk gyakran téves lehet.

2. Probléma

Kezdjük a probléma meghatározásával. Van egy sor primitívünk (int []), és ezt a tömböt a Lista (Lista). Az első intuitív próbálkozás a következő lehet:

int [] bemenet = új int [] {1,2,3,4}; List output = tömbök.asList (input);

Sajnos ez nem kompatibilis a típus inkompatibilitása miatt. Arra számíthatunk, hogy az autoboxing primitívek tömbjeivel működik. Ez az ösztönös hit azonban nem igaz.

Az automatikus boxolás csak egyetlen elemnél lehetséges (például int nak nek Egész szám). Nincs automatikus átalakítás primitív tömbből dobozos referenciatípusok tömbjévé (például int [] nak nek Egész szám[]).

Kezdjük végrehajtani néhány megoldást erre a problémára.

3. Iteráció

Mivel az autoboxing egyetlen primitív elemekkel működik, egyszerű megoldás az, hogy csak iteráljuk a tömb elemeit, és hozzáadjuk őket a Lista egyenként:

int [] bemenet = új int [] {1,2,3,4}; Lista kimenet = new ArrayList (); for (int érték: bemenet) {output.add (érték); }

Megoldottuk a problémát, de a megoldás meglehetősen bőbeszédű. Ezzel eljutottunk a következő megvalósításhoz.

4. Patakok

Java 8 óta használhatjuk a Folyam API. Az egysoros megoldást a Folyam:

int [] bemenet = új int [] {1,2,3,4}; List output = tömbök.stream (input) .boxed (). Gyűjt (Collectors.toList ());

Alternatív megoldásként használhatnánk IntStream:

int [] input = új int [] {1,2,3,4}; List output = IntStream.of (input) .boxed (). Collect (Collectors.toList ());

Ez minden bizonnyal sokkal szebben néz ki. Ezután megnézünk pár külső könyvtárat.

5. Guava

A guavai könyvtár egy burkolót nyújt a probléma körül. Kezdjük a Maven-függőség hozzáadásával:

 com.google.guava guava 29.0 jre köteg 

Tudjuk használni Ints.asList (), hasonló hasznossági osztályokkal a többi primitív típushoz:

int [] input = új int [] {1,2,3,4}; Lista kimenet = Ints.asList (input);

6. Apache Commons

Egy másik könyvtár az Apache Commons Lang. Ismét tegyük hozzá ennek a könyvtárnak a Maven-függőségét:

 org.apache.commons commons-lang3 3.10 

Pontosabban használjuk a ArrayUtils osztály:

int [] input = új int [] {1,2,3,4}; Egész szám [] outputBoxed = ArrayUtils.toObject (input); List output = tömbök.asList (outputBoxed);

7. Következtetés

Az eszköztárunkban most van néhány lehetőség egy primitív tömb átalakítására a-ra Lista. Amint láttuk, az autoboxolás csak egyes elemekre vonatkozik. Ebben az oktatóanyagban számos megoldást láthattunk a konverzió alkalmazására.

Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.