Ich versuche, eine ArrayList, die Integer-Objekte enthält, mit dem folgenden Code in primitive int [] zu konvertieren, aber es wird ein Fehler bei der Kompilierung ausgelöst. Ist es möglich in Java zu konvertieren?
List<Integer> x = new ArrayList<Integer>();
int[] n = (int[])x.toArray(int[x.size()]);
java
arrays
arraylist
primitive-types
Snehal
quelle
quelle
List<Integer> x = new ArrayList<Integer>();
Integer[] n = x.toArray(new Integer[0]);
Antworten:
Sie können konvertieren, aber ich glaube nicht, dass etwas eingebaut ist, um dies automatisch zu tun:
(Beachten Sie, dass dies eine NullPointerException auslöst, wenn eines
integers
oder mehrere Elemente darin enthalten sindnull
.)BEARBEITEN: Gemäß den Kommentaren möchten Sie möglicherweise den Listeniterator verwenden, um unangenehme Kosten mit Listen wie den folgenden zu vermeiden
LinkedList
:quelle
integers.stream().mapToInt(Integer::valueOf).toArray
Wenn Sie verwenden Java-8 Es gibt auch einen anderen Weg, dies zu tun.
Was es tut ist:
Stream<Integer>
von der Liste bekommenIntStream
durch Zuordnen jedes Elements zu sich selbst (Identitätsfunktion), Entpacken desint
von jedemInteger
Objekt gehaltenen Werts (automatisch seit Java 5 durchgeführt)int
durch AufrufentoArray
Sie können auch explizit
intValue
über eine Methodenreferenz aufrufen , dh:Es ist auch erwähnenswert, dass Sie eine erhalten könnten,
NullPointerException
wenn Sie einenull
Referenz in der Liste haben. Dies könnte leicht vermieden werden, indem der Stream-Pipeline eine Filterbedingung wie folgt hinzugefügt wird:Beispiel:
quelle
double
Typen verwendet werden kann; Gibt es kein Äquivalent fürfloat
Typen?Google Guava
Google Guava bietet eine gute Möglichkeit, dies durch einen Anruf zu tun
Ints.toArray
.quelle
Apache Commons verfügt über eine ArrayUtils-Klasse mit einer Methode toPrimitive (), die genau dies tut.
Wie Jon gezeigt hat, ist es jedoch ziemlich einfach, dies selbst zu tun, anstatt externe Bibliotheken zu verwenden.
quelle
Ich halte das Iterieren mit dem Iterator der Liste für eine bessere Idee, da
list.get(i)
die Leistung je nach Implementierung der Liste schlecht sein kann:quelle
Die Verwendung von Dollar sollte recht einfach sein:
Ich plane , die DSL zu verbessern , um das Zwischenprodukt zu entfernen
toArray()
Anrufquelle
Das funktioniert gut für mich :)
Gefunden unter https://www.techiedelight.com/convert-list-integer-array-int/
quelle
Es verwirrt mich, dass wir einmalige benutzerdefinierte Methoden empfehlen, wenn eine einwandfreie, gut genutzte Bibliothek wie Apache Commons das Problem bereits gelöst hat. Obwohl die Lösung trivial, wenn nicht absurd ist, ist es unverantwortlich, ein solches Verhalten aufgrund langfristiger Wartung und Zugänglichkeit zu fördern.
Gehen Sie einfach mit Apache Commons
quelle
Wenn Sie Eclipse-Sammlungen verwenden , können Sie mit dieser
collectInt()
Methode von einem Objektcontainer zu einem primitiven int-Container wechseln.Wenn Sie Ihre
ArrayList
in a konvertieren könnenFastList
, können Sie den Adapter entfernen.Hinweis: Ich bin ein Committer für Eclipse-Sammlungen.
quelle
Java 8:
quelle
Arrays.setAll ()
Ausgabe:
Das gleiche funktioniert für eine Reihe
long
oderdouble
, aber nicht für Arrays vonboolean
,char
,byte
,short
oderfloat
. Wenn Sie eine wirklich große Liste haben, gibt es sogar eineparallelSetAll
Methode, die Sie stattdessen verwenden können.Für mich ist das gut und elegant genug, dass ich weder eine externe Bibliothek erhalten noch Streams dafür verwenden möchte.
Dokumentationslink:
Arrays.setAll(int[], IntUnaryOperator)
quelle
Sie können es einfach in ein Array kopieren:
Nicht zu schick; aber hey, es funktioniert ...
quelle
Eine sehr einfache einzeilige Lösung ist:
quelle
Dieses Codesegment funktioniert für mich. Versuchen Sie Folgendes:
Erwähnenswert ist, dass ArrayList folgendermaßen deklariert werden sollte:
quelle
quelle
Zugang
arr
wie gewohntint[]
.quelle