Konvertieren Sie ein Array von Grundelementen in eine Liste

1. Übersicht

In diesem kurzen Tutorial zeigen wir, wie ein Array von Grundelementen in eine Liste von Objekten des entsprechenden Typs konvertiert wird . Normalerweise versuchen wir, Autoboxing in Java zu verwenden. Wie wir jedoch im nächsten Abschnitt sehen werden, kann unsere Intuition, wie Autoboxing funktioniert, oft falsch sein.

2. Problem

Beginnen wir mit der Definition des Problems. Wir haben ein Array von Grundelementen ( int [] ) und möchten dieses Array in eine Liste ( Liste ) konvertieren . Ein intuitiver erster Versuch könnte sein:

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

Leider wird dies aufgrund von Typinkompatibilität nicht kompiliert . Es ist zu erwarten, dass Autoboxing mit Arrays von Grundelementen funktioniert. Dieser instinktive Glaube ist jedoch nicht wahr.

Autoboxing findet nur für ein einzelnes Element statt (z. B. von int bis Integer ). Es gibt keine automatische Konvertierung von einem Array primitiver Typen in ein Array ihrer Boxed-Reference-Typen (z. B. von int [] nach Integer [] ).

Beginnen wir mit der Implementierung einiger Lösungen für dieses Problem.

3. Iteration

Da Autoboxing Arbeiten mit einzelnen primitiven Elemente, ist eine einfache Lösung , um nur Iterierte über die Elemente des Arrays und fügen Sie sie in die Liste eins nach dem anderen :

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

Wir haben das Problem gelöst, aber die Lösung ist ziemlich ausführlich. Dies bringt uns zur nächsten Implementierung.

4. Streams

Seit Java 8 können wir die Stream- API verwenden . Wir können eine einzeilige Lösung mit einem Stream bereitstellen :

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

Alternativ könnten wir IntStream verwenden :

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

Das sieht sicherlich viel schöner aus. Als nächstes schauen wir uns einige externe Bibliotheken an.

5. Guave

Die Guava-Bibliothek bietet einen Wrapper um dieses Problem . Beginnen wir mit dem Hinzufügen der Maven-Abhängigkeit:

 com.google.guava guava 29.0-jre bundle 

Wir können Ints.asList () mit ähnlichen Dienstprogrammklassen für die anderen primitiven Typen verwenden:

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

6. Apache Commons

Eine weitere Bibliothek ist die Apache Commons Lang. Fügen wir erneut die Maven-Abhängigkeit für diese Bibliothek hinzu:

 org.apache.commons commons-lang3 3.10 

Genauer gesagt verwenden wir die ArrayUtils- Klasse:

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

7. Fazit

Wir haben jetzt einige Optionen in unserer Toolbox, um ein Array von Grundelementen in eine Liste zu konvertieren . Wie wir gesehen haben, erfolgt Autoboxing nur für einzelne Elemente. In diesem Tutorial haben wir verschiedene Lösungen zum Anwenden der Konvertierung gesehen .

Wie immer ist der vollständige Quellcode des Artikels auf GitHub verfügbar.