Wie konvertiere ich ein Array in eine Liste in Java?
Ich habe das verwendet, Arrays.asList()
aber das Verhalten (und die Signatur) haben sich irgendwie von Java SE 1.4.2 (Dokumente jetzt im Archiv) auf 8 geändert , und die meisten Snippets, die ich im Web gefunden habe, verwenden das Verhalten 1.4.2.
Zum Beispiel:
int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
- on 1.4.2 gibt eine Liste mit den Elementen 1, 2, 3 zurück
- on 1.5.0+ gibt eine Liste mit dem Array-Spam zurück
In vielen Fällen sollte es leicht zu erkennen sein, aber manchmal kann es unbemerkt verrutschen:
Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
java
arrays
list
data-conversion
Alexandru
quelle
quelle
Arrays.asList(new int[] { 1, 2, 3 })
; auf jeden Fall hat kompilieren nicht in Java 1.4.2, weil einint[]
ist nicht einObject[]
.Arrays.asList
funktionieren.Antworten:
In Ihrem Beispiel liegt dies daran, dass Sie keine Liste eines primitiven Typs haben können. Mit anderen Worten
List<int>
ist nicht möglich.Sie können haben jedoch eine
List<Integer>
die Verwendung vonInteger
Klasse, die die Packungenint
primitiv. Konvertieren Sie Ihr ArrayList
mit derArrays.asList
Utility-Methode in a.Sehen Sie diesen Code live auf IdeOne.com .
quelle
List<Integer[]>
?Integer[] integerArray1 = { 1 }; Integer[] integerArray2 = { 2 }; List<Integer[]> integerArrays = Arrays.asList(integerArray1, integerArray2);
In Java 8 können Sie Streams verwenden:
quelle
boolean[]
. Ich denke, das liegt daran, dass es genauso einfach ist, eine zu erstellenBoolean[]
. Das ist wahrscheinlich eine bessere Lösung. Wie auch immer, es ist eine interessante Eigenart.Wenn Sie über die Konvertierungsmethode sprechen, hängt es davon ab, warum Sie Ihre benötigen
List
. Wenn Sie es nur zum Lesen von Daten benötigen. Ok, hier hast du es:Aber wenn Sie so etwas tun:
du bekommst
java.lang.UnsupportedOperationException
. In einigen Fällen benötigen Sie sogar Folgendes:Der erste Ansatz konvertiert das Array eigentlich nicht, sondern repräsentiert es wie ein
List
. Das Array befindet sich jedoch unter der Haube mit all seinen Eigenschaften wie einer festen Anzahl von Elementen. Bitte beachten Sie, dass Sie beim Erstellen einen Typ angeben müssenArrayList
.quelle
Das Problem ist, dass varargs in Java5 eingeführt wurde und leider auch
Arrays.asList()
mit einer vararg-Version überladen wurde. SoArrays.asList(spam)
wird durch den Java5 Compiler als Vararg Parameter int Arrays verstanden.Dieses Problem wird ausführlicher in Effective Java 2nd Ed., Kapitel 7, Punkt 42 erläutert.
quelle
Es scheint etwas spät zu sein, aber hier sind meine zwei Cent. Wir können nicht haben,
List<int>
wieint
es ein primitiver Typ ist, also können wir nur habenList<Integer>
.Java 8 (int Array)
Java 8 und niedriger (Integer Array)
Benötigen Sie ArrayList und nicht List?
Wenn wir eine spezifische Implementierung von
List
zBArrayList
wollen, können wir verwendentoCollection
als:Warum
list21
kann nicht strukturell verändert werden?Wenn wir
Arrays.asList
die Größe der zurückgegebenen Liste verwenden, ist dies fest, da es sich bei der zurückgegebenen Liste nicht umjava.util.ArrayList
eine private statische Klasse handelt, die darin definiert istjava.util.Arrays
. Wenn wir also Elemente zur zurückgegebenen Liste hinzufügen oder daraus entfernen,UnsupportedOperationException
wird ein ausgelöst. Wir sollten also weitermachen,list22
wenn wir die Liste ändern möchten. Wenn wir Java8 haben, können wir auch mit gehenlist23
.Klar zu sein
list21
kann in dem Sinne geändert werden, dass wir es aufrufen können,list21.set(index,element)
aber diese Liste kann möglicherweise nicht strukturell geändert werden, dh es können keine Elemente zur Liste hinzugefügt oder daraus entfernt werden. Sie können diese Frage auch überprüfen .Wenn wir eine unveränderliche Liste wollen, können wir sie wie folgt umschließen:
Ein weiterer zu beachtender Punkt ist, dass die Methode
Collections.unmodifiableList
eine nicht veränderbare Ansicht der angegebenen Liste zurückgibt. Eine nicht modifizierbare Ansichtssammlung ist eine Sammlung, die nicht modifizierbar ist und auch eine Ansicht auf eine Hintergrundsammlung darstellt. Beachten Sie, dass Änderungen an der Hintergrundsammlung möglicherweise weiterhin möglich sind. Wenn sie auftreten, sind sie in der nicht veränderbaren Ansicht sichtbar.Wir können eine wirklich unveränderliche Liste in Java 9 und 10 haben.
Wirklich unveränderliche Liste
Java 9:
Java 10 (wirklich unveränderliche Liste) auf zwei Arten:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
Überprüfen Sie auch meine Antwort für mehr.
quelle
List::add
&List::remove
mit einer von zurückgegebenen Liste fehlschlägtArrays.asList
. Das JavaDoc für diese Methode ist schlecht geschrieben und in diesem Punkt unklar. Bei meiner dritten Lesung sollte der Ausdruck „feste Größe“ sagen, dass man keine Elemente hinzufügen oder entfernen kann.Noch kürzer:
quelle
Ich musste kürzlich ein Array in eine Liste konvertieren. Später hat das Programm die Liste gefiltert, um die Daten zu entfernen. Wenn Sie die Funktion Arrays.asList (Array) verwenden, erstellen Sie eine Sammlung mit fester Größe: Sie können weder hinzufügen noch löschen. Dieser Eintrag erklärt das Problem besser als ich kann: Warum erhalte ich eine UnsupportedOperationException, wenn ich versuche, ein Element aus einer Liste zu entfernen? .
Am Ende musste ich eine "manuelle" Konvertierung durchführen:
Ich nehme an, ich hätte mithilfe einer List.addAll-Operation (items) eine Konvertierung von einem Array zu einer Liste hinzufügen können.
quelle
new ArrayList<ListItem>(Arrays.asList(itemsArray))
würde das gleicheCollections.addAll(items, itemsArray)
stattdessen.Arrays verwenden
Dies ist der einfachste Weg, ein Array in zu konvertieren
List
. Wenn Sie jedoch versuchen, ein neues Element hinzuzufügen oder ein vorhandenes Element aus der Liste zu entfernen, wird ein ElementUnsupportedOperationException
ausgelöst.Verwenden von ArrayList- oder anderen Listenimplementierungen
Sie können eine
for
Schleife verwenden, um alle Elemente des Arrays zu einerList
Implementierung hinzuzufügen , zArrayList
.Verwenden der Stream-API in Java 8
Sie können das Array in einen Stream verwandeln und dann den Stream mit verschiedenen Kollektoren sammeln: Der Standardkollektor in Java 8 wird
ArrayList
hinter dem Bildschirm verwendet, aber Sie können auch Ihre bevorzugte Implementierung festlegen.Siehe auch:
quelle
Eine weitere Problemumgehung, wenn Sie Apache commons-lang verwenden:
Wo ArrayUtils.toObject Konvertiten
int[]
zuInteger[]
quelle
Sie müssen in Array umwandeln
quelle
Einzeiler:
quelle
In Java 9 haben Sie die noch elegantere Lösung, unveränderliche Listen über die neue Convenience-Factory-Methode zu verwenden
List.of
:(schamlos von hier kopiert )
quelle
Wenn Sie auf Java 8 (oder höher) abzielen, können Sie Folgendes versuchen:
HINWEIS:
Beachten
Collectors.<Integer>toList()
Sie, dass diese generische Methode Ihnen hilft, den Fehler "Typinkongruenz: Konvertiert nicht vonList<Object>
nachList<Integer>
" zu vermeiden .quelle
Verwenden von Guave:
Verwenden von Apache Commons-Sammlungen:
quelle
Wenn dies hilft: Ich hatte das gleiche Problem und habe einfach eine generische Funktion geschrieben, die ein Array verwendet und eine ArrayList desselben Typs mit demselben Inhalt zurückgibt:
quelle
Gegebenes Array:
Konvertieren eines Integer-Arrays in eine Integer-Liste
Eine Möglichkeit: boxed () -> gibt den IntStream zurück
Zweiter Weg: Ordnen Sie jedes Element des Streams Integer zu und sammeln Sie es dann
HINWEIS: Mit mapToObj können Sie jedes int-Element in einen String-Stream, einen Char-Stream usw. umwandeln, indem Sie i in (char) i setzen
Konvertieren eines Array-Typs in einen anderen Typ Beispiel:
quelle
Es hängt also davon ab, welche Java-Version Sie versuchen.
Java 7
ODER
ODER
In Java 8
Referenz - http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/
quelle
Können Sie diese Antwort bitte verbessern, da dies das ist, was ich benutze, aber ich bin nicht 100% klar. Es funktioniert gut, aber IntelliJ hat eine neue WeatherStation hinzugefügt [0]. Warum die 0?
quelle
Verwenden Sie zwei Codezeilen, um das Array in eine Liste zu konvertieren. Wenn Sie es als ganzzahligen Wert verwenden, müssen Sie den Autoboxing-Typ für den primitiven Datentyp verwenden
quelle