Zet een reeks primitieven om in een lijst

1. Overzicht

In deze korte tutorial, we laten zien hoe je een reeks primitieven converteert naar een Lijst van objecten van het overeenkomstige type. Meestal proberen we autoboxing in Java te gebruiken. Zoals we echter in de volgende sectie zullen zien, kan onze intuïtie over hoe autoboxen werkt vaak onjuist zijn.

2. Probleem

Laten we beginnen met de definitie van het probleem. We hebben een hele reeks primitieven (int []), en we willen die array converteren naar een Lijst (Lijst). Een intuïtieve eerste poging zou kunnen zijn:

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

Helaas is dit zal niet compileren vanwege incompatibiliteit van het type. We zouden kunnen verwachten dat autoboxing werkt met arrays van primitieven. Dit instinctieve geloof is echter niet waar.

Autoboxen gebeurt alleen voor een enkel element (bijvoorbeeld van int naar Geheel getal). Er is geen automatische conversie van een reeks primitieve typen naar een reeks van hun omkaderde referentietypes (bijvoorbeeld van int [] naar Geheel getal[]).

Laten we beginnen met het implementeren van een paar oplossingen voor dit probleem.

3. Herhaling

Omdat autoboxen werkt met enkele primitieve elementen, een eenvoudige oplossing is om de elementen van de array gewoon te herhalen en toe te voegen aan de Lijst een voor een:

int [] input = new int [] {1,2,3,4}; Lijstuitvoer = nieuwe ArrayList (); for (int waarde: input) {output.add (waarde); }

We hebben het probleem opgelost, maar de oplossing is nogal uitgebreid. Dit brengt ons bij de volgende implementatie.

4. Streams

Sinds Java 8 kunnen we de Stroom API. We kunnen een eenregelige oplossing bieden met behulp van een Stroom:

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

Als alternatief kunnen we gebruiken IntStream:

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

Dit ziet er zeker een stuk leuker uit. Vervolgens kijken we naar een aantal externe bibliotheken.

5. Guave

De Guava-bibliotheek biedt een omslag rond dit probleem. Laten we beginnen met het toevoegen van de Maven-afhankelijkheid:

 com.google.guava guava 29.0-jre-bundel 

We kunnen gebruiken Ints.asList (), met vergelijkbare utiliteitsklassen voor de andere primitieve typen:

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

6. Apache Commons

Een andere bibliotheek is de Apache Commons Lang. Nogmaals, laten we de Maven-afhankelijkheid voor deze bibliotheek toevoegen:

 org.apache.commons commons-lang3 3.10 

Om precies te zijn gebruiken we de ArrayUtils klasse:

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

7. Conclusie

We hebben nu een paar opties in onze toolbox om een ​​reeks primitieven om te zetten naar een Lijst. Zoals we hebben gezien, gebeurt autoboxen alleen voor afzonderlijke elementen. In deze zelfstudie hebben we verschillende oplossingen gezien voor het toepassen van de conversie.

Zoals altijd is de volledige broncode van het artikel beschikbaar op GitHub.


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