Konverter en rekke primitiver til en liste

1. Oversikt

I denne korte opplæringen, vi viser hvordan du konverterer en rekke primitiver til a Liste av gjenstander av tilsvarende type. Vanligvis kan vi prøve å bruke autoboksing i Java. Imidlertid, som vi skal se i neste avsnitt, kan vår intuisjon av hvordan autoboksing fungerer ofte være feil.

2. Problem

La oss begynne med definisjonen av problemet. Vi har en rekke primitiver (int []), og vi ønsker å konvertere den matrisen til en Liste (Liste). Et intuitivt første forsøk kan være:

int [] input = new int [] {1,2,3,4}; Listeutgang = Arrays.asList (input);

Dessverre dette kompilerer ikke på grunn av type inkompatibilitet. Vi kan forvente at autoboksing fungerer med matriser av primitiver. Imidlertid er denne instinktive troen ikke sant.

Autoboksing skjer bare for et enkelt element (for eksempel fra int til Heltall). Det er ingen automatisk konvertering fra en rekke primitive typer til en matrise med deres referanse typer (for eksempel fra int [] til Heltall []).

La oss begynne å implementere noen få løsninger på dette problemet.

3. Iterasjon

Siden autoboksing fungerer med enkelt primitive elementer, en enkel løsning er å bare gjenta elementene i matrisen og legge dem til Liste en etter en:

int [] input = new int [] {1,2,3,4}; Listeutgang = ny ArrayList (); for (int-verdi: input) {output.add (verdi); }

Vi har løst problemet, men løsningen er ganske ordentlig. Dette bringer oss til neste implementering.

4. Bekker

Siden Java 8 kan vi bruke Strøm API. Vi kan tilby en linjeløsning ved hjelp av en Strøm:

int [] input = new int [] {1,2,3,4}; Listeutgang = Arrays.stream (input) .boxed (). Collect (Collectors.toList ());

Alternativt kan vi bruke IntStream:

int [] input = new int [] {1,2,3,4}; Listeutgang = IntStream.of (input) .boxed (). Collect (Collectors.toList ());

Dette ser absolutt mye bedre ut. Deretter ser vi på et par eksterne biblioteker.

5. Guava

Guava-biblioteket gir en beskrivelse av dette problemet. La oss starte med å legge til Maven-avhengigheten:

 com.google.guava guava 29.0-jre-pakke 

Vi kan bruke Ints.asList (), med lignende bruksklasser for de andre primitive typene:

int [] input = new int [] {1,2,3,4}; Listeutgang = Ints.asList (input);

6. Apache Commons

Et annet bibliotek er Apache Commons Lang. Igjen, la oss legge til Maven-avhengigheten for dette biblioteket:

 org.apache.commons commons-lang3 3.10 

Mer presist bruker vi ArrayUtils klasse:

int [] input = new int [] {1,2,3,4}; Heltall [] outputBoxed = ArrayUtils.toObject (input); Listeutgang = Arrays.asList (outputBoxed);

7. Konklusjon

Vi har nå noen alternativer i verktøykassen vår for å konvertere en rekke primitiver til en Liste. Som vi har sett, skjer autoboksing bare for enkeltelementer. I denne veiledningen har vi sett flere løsninger for å bruke konverteringen.

Som alltid er hele kildekoden til artikkelen tilgjengelig på GitHub.


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