2016-06-29 3 views
1

Ich verwende den folgenden Weg, um int Werte von einem ResultSet in ein int-Array zu setzen. Dies scheint sehr ineffizient, aber ich kann nicht herausfinden, wie man ein Array von primitiven int bekommen, wo ich die Größe nicht vorher weiß.Wie erhalten int [] Array aus Spalte in Zeilen von ResultSet?

Ich brauche diese ein primitives Array, wie es eine Methode erfordert.

+0

Hallo, Sie können [Apache Common Lang] (http://commons.apache.org/proper/commons-lang/) verwenden, um ein Array von int zuzuweisen: 'int [] intArray = ArrayUtils.toPrimitive (ints. toArray (new Integer [ints.size()])); ' –

+0

@gjeanmart aber machen sie intern nicht das Gleiche? Ich würde eine ganze Bibliothek einschließen (und neue Klassen laden), nur um ein paar Zeilen Code zu machen: https://github.com/apache/common-lang/blob/master/src/main/java/org/ apache/commons/lang3/ArrayUtils.java –

+0

@DonRhummy: Sie haben Recht der [Code ist ziemlich ähnlich] (https://commons.apache.org/proper/commons-lang/apidocs/src-html/org/apache/commons /lang3/ArrayUtils.html). Andernfalls, wenn Sie Java-8 verwenden, können Sie die Stream-API wie folgt versuchen: int [] intArray = ints.stream(). MapToInt (i -> i) .toArray(); ' –

Antwort

2

Wenn Sie die Anzahl der gelesenen Werte aus der Ergebnismenge nicht kennen, können Sie die Verwendung einer Liste nicht vermeiden.

Aber Sie können mit einem List<Integer> vermeiden, wenn Sie eine Liste Klasse haben, die TIntList der trove project primitive int Werte wie zum Beispiel speichern kann.

Am Ende sollten Sie wirklich den Leistungseinfluss der Verwendung von Zwischenprodukten Integer messen, bevor Sie zu viel Energie für diese Frage ausgeben.

0

Convert ArrayList zu Array

Sie haben würden eine Anfangsgröße erraten und dann das Array der Größe, wie Sie das letzte Element füllen, je nach Bedarf zu wiederholen, wie Sie durch Ihre Ergebnismenge gehen.

Dieses Verhalten ist genau das, was ArrayList Ihnen bereits gibt. Aber schon ausgetestet. ;-)

Also einfach ArrayList<Integer> verwenden. Am Ende in ein Array konvertieren.

Sie könnten denken, Collection::toArray zu verwenden. Aber dieses Dienstprogramm kann nur ein Array von Objekten zurückgeben, keine Primitive.

Siehe this Question, für mehrere gute Möglichkeiten, um in Array von Primitiven zu konvertieren.

Meine Wahl würde Google Guava anrufen. Während das Hinzufügen von Guava für diesen einen Zweck möglicherweise zu viel ist, ist Guava so nützlich, dass ich die Bibliothek standardmäßig zu den meisten neuen Java-Projekten hinzufüge.

List<Integer> list = ... ; 
int[] values = Ints.toArray(list) ; 

Wenn die Implementierungsumgebung waren extrem eng auf dem Gedächtnis, oder wenn Sie eine sehr große Anzahl von Elementen haben, oder wenn Sie diesen Vorgang zu tun wurden wie so oft die Leistung zu beeinflussen, würde ich nur dann greifen, um Abfüll- und -resize ein Array int manuell selbst.

+0

Sie tun grundsätzlich dasselbe. Es scheint, dass es keine Möglichkeit gibt, eine Objektliste und eine Schleife zu erstellen. https://github.com/google/guava/blob/master/guava/src/com/google/common/primitives/Ints.java –

+0

@DonRhummy Nein, es gibt keine Magie, immer noch eine Schleife, um ein neues Array zu füllen.Tatsächlich ist der Guava-Code insofern ineffizient, als er ein zusätzliches Array, ein temporäres Array von "Object", erstellt, anstatt über die Collection zu iterieren (nicht sicher warum, sehe keinen Nutzen). Aber dieser Code ist bereits geschrieben, bereits debugged. Ich vertraue Code, der von engagierten Googlern und öffentlichen Peers geschrieben wurde, so viel mehr, als ich meiner eigenen lausigen Codierung vertraue. –

Verwandte Themen