Konverter en række primitiver til en liste

1. Oversigt

I denne korte vejledning vi viser, hvordan man konverterer en række primitiver til en Liste af genstande af den tilsvarende type. Typisk kan vi prøve at bruge autoboxing i Java. Som vi vil se i det næste afsnit, kan vores intuition om, hvordan autoboxing fungerer, ofte være fejlagtig.

2. Problem

Lad os begynde med definitionen af ​​problemet. Vi har en række primitiver (int []), og vi ønsker at konvertere det array til et Liste (Liste). Et intuitivt første forsøg kunne være:

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

Desværre dette kompilerer ikke på grund af typekompatibilitet. Vi kan forvente, at autoboxing fungerer med arrays af primitiver. Denne instinktive tro er dog ikke sand.

Autoboxing sker kun for et enkelt element (for eksempel fra int til Heltal). Der er ingen automatisk konvertering fra en matrix af primitive typer til en matrix af deres referencetyper i boks (f.eks. Fra int [] til Heltal[]).

Lad os begynde at implementere et par løsninger på dette problem.

3. Iteration

Da autoboxing fungerer med enkelt primitive elementer, en simpel løsning er bare at gentage elementerne i arrayet og føje dem til Liste en efter en:

int [] input = ny int [] {1,2,3,4}; Listeoutput = ny ArrayList (); for (int-værdi: input) {output.add (værdi); }

Vi har løst problemet, men løsningen er ret detaljeret. Dette bringer os til den næste implementering.

4. Strømme

Siden Java 8 kan vi bruge Strøm API. Vi kan levere en en-linjeløsning ved hjælp af en Strøm:

int [] input = ny int [] {1,2,3,4}; Listeoutput = Arrays.stream (input). Boxed (). Collect (Collectors.toList ());

Alternativt kunne vi bruge IntStream:

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

Dette ser bestemt meget pænere ud. Dernæst ser vi på et par eksterne biblioteker.

5. Guava

Guava-biblioteket indeholder en indpakning omkring dette problem. Lad os starte med at tilføje Maven-afhængighed:

 com.google.guava guava 29.0-jre-pakke 

Vi kan bruge Ints.asList (), med lignende brugsklasser for de andre primitive typer:

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

6. Apache Commons

Et andet bibliotek er Apache Commons Lang. Lad os igen tilføje Maven-afhængighed for dette bibliotek:

 org.apache.commons commons-lang3 3.10 

Mere præcist bruger vi ArrayUtils klasse:

int [] input = ny int [] {1,2,3,4}; Heltal [] outputBoxed = ArrayUtils.toObject (input); Listeoutput = Arrays.asList (outputBoxed);

7. Konklusion

Vi har nu et par muligheder i vores værktøjskasse til at konvertere en række primitiver til en Liste. Som vi har set, sker autoboxing kun for enkeltelementer. I denne vejledning har vi set flere løsninger til anvendelse af konverteringen.

Som altid er artiklens fulde kildekode tilgængelig på GitHub.


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