Wenn Sie ein Array von Java-Objekten haben, die einen primitiven Typ haben (z. B. Byte, Integer, Char usw.). Gibt es eine gute Möglichkeit, es in ein Array vom primitiven Typ umzuwandeln? Dies kann insbesondere erfolgen, ohne dass ein neues Array erstellt und der Inhalt durchlaufen werden muss.
So zum Beispiel gegeben
Integer[] array
Was ist der beste Weg, dies in umzuwandeln
int[] intArray
Leider müssen wir dies ziemlich häufig tun, wenn wir eine Schnittstelle zwischen Hibernate und einigen Bibliotheken von Drittanbietern herstellen, über die wir keine Kontrolle haben. Es scheint, dass dies eine recht häufige Operation ist, daher wäre ich überrascht, wenn es keine Abkürzung gibt.
Danke für Ihre Hilfe!
quelle
Wieder einmal ist Apache Commons Lang dein Freund. Sie bieten ArrayUtils.toPrimitive (), das genau das tut, was Sie brauchen. Sie können angeben, wie Sie mit Nullen umgehen möchten.
quelle
Mit in Java 8 eingeführten Streams ist dies möglich:
Derzeit gibt es jedoch nur primitive Streams für
int
,long
unddouble
. Wenn Sie in einen anderen primitiven Typ konvertieren müssen, z. B.byte
den kürzesten Weg ohne externe Bibliothek, ist dies:Oder die for-Schleife kann durch einen Stream ersetzt werden, wenn Sie möchten:
Alle diese werden ein werfen,
NullPointerException
wenn eines Ihrer Elemente sindnull
.quelle
Integer::intValue
können Sie auch verwendeni -> i
(was Unboxing verwendet).Integer::intValue
für Sie auf. Warum also ein neues Lambda erstellen, wenn die Methode sofort verfügbar ist?int[] ints = Arrays.stream(objects).mapToInt(i -> Integer.parseInt(i.toString())).toArray();
hoffe, dies ist hilfreich für alle, die das gleiche Problem haben. Und wenn jemand einen besseren Weg kennt, lass es mich wissen.Verwenden von Guave :
Dokumentation:
Arrays.asList
(Kern-API)Ints.toArray
(Guave)quelle
Sie können ein Array von Integer in Java nicht in int konvertieren (dh Sie können den Typ der Elemente eines Arrays nicht ändern). Sie müssen also entweder ein neues int [] -Array erstellen und den Wert der Integer-Objekte in dieses Array kopieren, oder Sie können einen Adapter verwenden:
Dies kann Ihren Code ein wenig lesbarer machen und das IntAdapter-Objekt belegt nur wenige Bytes Speicher. Der große Vorteil eines Adapters ist, dass Sie hier Sonderfälle behandeln können:
Eine andere Lösung ist die Verwendung von Commons Primitives, die viele vordefinierte Adapter enthalten. Schauen Sie sich in Ihrem Fall ListIntList an .
quelle
Oder mach es einfach, wenn du es nur einmal machst. Aber Sie haben nicht über Integer! = Null-Fall gesprochen.
quelle
Die Verwendung von Dollar ist einfach wie folgt:
quelle
$
! Ich glaube nicht, dass es ermutigt wird ...