Wie konvertiere ich int[] hinein List<Integer> auf Java?
Natürlich bin ich an jeder anderen Antwort interessiert, als es in einer Schleife zu tun, Element für Element. Aber wenn es keine andere Antwort gibt, werde ich diese als die beste auswählen, um die Tatsache zu zeigen, dass diese Funktionalität nicht Teil von Java ist.
Wir können IntStream.Of(array).collect(Collectors.toList) verwenden.
– Saroj Kumar Sahoo
15. Mai 2020 um 11:01 Uhr
@SarojKumarSahoo Es gibt kein Ein-Argument collect in IntStream.
– John McClane
12. Oktober 2020 um 0:25 Uhr
Es gibt kein build-in Weg, es zu tun. Sie müssen dies manuell tun, eine ArrayList deklarieren und jeden Wert im int Array zu ArrayList hinzufügen. Was für ein Miss!
– ChuckZHB
24. März 2021 um 8:37 Uhr
mikeyreilly
Ströme
In Java 8+ können Sie einen Stream Ihrer erstellen int Reihe. Entweder anrufen Arrays.stream oder IntStream.of.
@njfrost Du hast Recht und IntStream.of ruft nur Arrays.stream auf, also habe ich die Antwort nach deinem Vorschlag verbessert
– mikeyreilly
4. Oktober 2017 um 8:00 Uhr
Aus irgendeinem Grund scheint dies nicht den erwarteten Ergebnistyp auf Android Studio zurückzugeben (funktioniert auf Eclipse). Es heißt, erwartete Liste gefundene Liste.
– Eugenio López
7. August 2018 um 19:13 Uhr
Es sieht sauber und prägnant aus, aber als ich dies im Gegensatz zu der von @willcodejavaforfood auf Leetcode bereitgestellten Basislösung verwendete, verschlechterte sich die Programmleistung sowohl in Bezug auf den Speicher als auch auf die Laufzeit
– chitresh sirohi
31. März 2020 um 3:31 Uhr
@chitreshsirohi Das liegt daran, dass Lambda-Funktionen, die in Streams verwendet werden, dazu führen, dass Java einige anonyme Klassen erstellt.
– Ashvin Sharma
2. Juni 2020 um 3:44 Uhr
willcodejavaforfood
Es gibt keine Verknüpfung zum Konvertieren von int[] zu List<Integer> als Arrays.asList befasst sich nicht mit Boxen und wird nur eine erstellen List<int[]> was du nicht willst. Sie müssen eine Utility-Methode erstellen.
int[] ints = {1, 2, 3};
List<Integer> intList = new ArrayList<Integer>(ints.length);
for (int i : ints)
{
intList.add(i);
}
Am besten initialisiert man die Liste mit der Größe des Arrays
– David Rabinowitz
2. Juli 2009 um 11:54 Uhr
for (int i: ints) intList.add(i);
– Stefan Denne
2. Juli 2009 um 12:19 Uhr
@willcodejavaforfood – David meint, dass dies besser ist: new ArrayList(ints.length);
– Stefan Denne
2. Juli 2009 um 12:25 Uhr
@willcodejavaforfood: Das Deklarieren der Größe der ArrayList beim Erstellen verhindert, dass die Größe intern geändert werden muss, nachdem eine bestimmte Menge hinzugefügt wurde. Ich bin mir nicht sicher, ob der Vorteil gering ist, aber es gibt definitiv einen Vorteil.
– Grundlefleck
24. Januar 2010 um 20:22 Uhr
new ArrayList<Integer>() {{ for (int i : ints) add(i); }}
Dies sollte die richtige Antwort sein. Siehe den zweiten Satz der Frage: “Natürlich interessiert mich jede andere Antwort, als es Punkt für Punkt in einer Schleife zu tun.”
– Josketres
22. April 2014 um 12:22 Uhr
Hier gibt es ein paar Feinheiten. Die zurückgegebene Liste verwendet das bereitgestellte Array als Sicherungsspeicher, daher sollten Sie das Array nicht mutieren. Die Liste garantiert auch nicht die Identität der enthaltenen Integer-Objekte. Das heißt, das Ergebnis von list.get(0) == list.get(0) wird nicht angegeben.
– pburka
22. April 2015 um 15:45 Uhr
Achten Sie beim Hinzufügen von Bibliotheken auf die Anzahl der Methodenreferenzen auf Android. Guter Fund aber.
– Milosmen
3. Oktober 2016 um 13:39 Uhr
Arrays.asList wird nicht funktionieren, wie einige der anderen Antworten erwarten.
Dieser Code wird nicht Erstellen Sie eine Liste mit 10 ganzen Zahlen. Es wird gedruckt 1nicht 10:
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List lst = Arrays.asList(arr);
System.out.println(lst.size());
Ich werde eine weitere Antwort mit einer anderen Methode hinzufügen. keine Schleife, sondern eine anonyme Klasse, die die Autoboxing-Funktionen nutzt:
public List<Integer> asList(final int[] is)
{
return new AbstractList<Integer>() {
public Integer get(int i) { return is[i]; }
public int size() { return is.length; }
};
}
+1 das ist kürzer als meins, aber meins funktioniert für alle primitiven Typen
– dfa
2. Juli 2009 um 12:31 Uhr
Das ist zwar schneller und verbraucht weniger Speicher als das Erstellen einer ArrayList, aber der Kompromiss ist, dass List.add() und List.remove() nicht funktionieren.
– Stefan Denne
2. Juli 2009 um 13:03 Uhr
Ich mag diese Lösung für große Arrays mit spärlichen Zugriffsmustern, aber für häufig aufgerufene Elemente würde dies zu vielen unnötigen Instanziierungen von Integer führen (z. B. wenn Sie 100 Mal auf dasselbe Element zugegriffen hätten). Außerdem müssten Sie Iterator definieren und den Rückgabewert in Collections.unmodifiableList einschließen.
– Adamsky
2. Juli 2009 um 13:44 Uhr
@Christoffer danke. Ich habe die hinzugefügt set Methode und jetzt kann ich sogar das Array sortieren …
– freedev
28. Juli 2014 um 12:17 Uhr
Sнаđошƒаӽ
Das kleinste Stück Code wäre:
public List<Integer> myWork(int[] array) {
return Arrays.asList(ArrayUtils.toObject(array));
}
wo ArrayUtils von commons-lang kommt 🙂
+1 das ist kürzer als meins, aber meins funktioniert für alle primitiven Typen
– dfa
2. Juli 2009 um 12:31 Uhr
Das ist zwar schneller und verbraucht weniger Speicher als das Erstellen einer ArrayList, aber der Kompromiss ist, dass List.add() und List.remove() nicht funktionieren.
– Stefan Denne
2. Juli 2009 um 13:03 Uhr
Ich mag diese Lösung für große Arrays mit spärlichen Zugriffsmustern, aber für häufig aufgerufene Elemente würde dies zu vielen unnötigen Instanziierungen von Integer führen (z. B. wenn Sie 100 Mal auf dasselbe Element zugegriffen hätten). Außerdem müssten Sie Iterator definieren und den Rückgabewert in Collections.unmodifiableList einschließen.
– Adamsky
2. Juli 2009 um 13:44 Uhr
@Christoffer danke. Ich habe die hinzugefügt set Methode und jetzt kann ich sogar das Array sortieren …
– freedev
28. Juli 2014 um 12:17 Uhr
In Java 8 mit Stream:
int[] ints = {1, 2, 3};
List<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, Arrays.stream(ints).boxed().toArray(Integer[]::new));
oder mit Sammlern
List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList());
Warum nicht einfach einen Kollektor verwenden?
– Assylias
18. Mai 2014 um 12:23 Uhr
9162100cookie-checkWie konvertiere ich int[] in die Liste auf Java?yes
Wir können IntStream.Of(array).collect(Collectors.toList) verwenden.
– Saroj Kumar Sahoo
15. Mai 2020 um 11:01 Uhr
@SarojKumarSahoo Es gibt kein Ein-Argument
collect
inIntStream
.– John McClane
12. Oktober 2020 um 0:25 Uhr
Es gibt kein
build-in
Weg, es zu tun. Sie müssen dies manuell tun, eine ArrayList deklarieren und jeden Wert im int Array zu ArrayList hinzufügen. Was für ein Miss!– ChuckZHB
24. März 2021 um 8:37 Uhr