Hallo! In diesem Artikel schauen wir uns an, wie man in Java eine Liste von Elementen in ein Array von Elementen konvertiert. Tatsächlich gibt es nicht so viele Möglichkeiten, dies zu tun, und sie sind alle einfach, sodass der Artikel nicht kompliziert wird. Lassen Sie uns sofort entscheiden, womit wir arbeiten. Wir werden Listen in Arrays umwandeln, genauer gesagt in eine Liste mit Strings: I, love, learning, on, JavaRush wird in ein Array derselben Strings umgewandelt. Aber zuerst ein kleiner Bonus. Lassen Sie uns darüber sprechen, wie Sie schnell eine Liste aufschreiben können.
So schreiben Sie schnell eine Liste in ein Array
Denken Sie daran: Es gibt zwei Szenarien in diesem Leben. Das erste ist völlige Melancholie und Langeweile, wenn wir eine neue Liste erstellen:List<String> wordsList = new ArrayList();
Und dann fügen wir Werte hinzu ... einen nach dem anderen ...
wordsList.add("I");
wordsList.add("love");
wordsList.add("learning");
wordsList.add("on");
wordsList.add("JavaRush");
Nicht gut. Ich habe vergessen, warum die Liste benötigt wurde, während ich sie erstellt habe! Die zweite Möglichkeit besteht darin, alle unnötigen Dinge abzuschneiden und ... Utility-Klassen zu übernehmen. Zum Beispiel die Klasse Arrays
, die über eine unglaublich praktische Methode verfügt asList
. Sie können ihm alles übergeben, was Sie als Liste erstellen möchten, und die Methode erstellt daraus eine Liste. Etwas wie das:
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
varargs
Diese Methode nimmt gewissermaßen ein Array in sich auf . Ich entschuldige mich dafür, dass ich Ihnen in der Vorlesung „Liste in Array“ beigebracht habe, dass Array zuerst auflisten soll, aber die Umstände erforderten es. Nun zu unseren Methoden zum Konvertieren von Listen in Arrays.
Methode Nr. 1. Büste
Diese Methode ist perfekt für diejenigen, die ohne viel Nachdenken Code auf der Tastatur eingeben möchten. Eine Art Meditation. Schritt 1. Erstellen Sie ein Array mit der gleichen Länge wie die Liste:List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = new String[wordsList.size()];
Schritt 2. Erstellen Sie eine Schleife mit einem Zähler, um alle Elemente der Liste zu durchlaufen und über den Index auf die Array-Zellen zugreifen zu können:
for (int i = 0; i < wordsList.size(); i++) {
}
Schritt 3. Innerhalb der Schleife weisen wir den Wert jedes Elements der Liste mit Index i der Array-Zelle mit Index i zu:
for (int i = 0; i < wordsList.size(); i++) {
wordsArray[i] = wordsList.get(i);
}
Ergebnis:
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = new String[wordsList.size()];
for (int i = 0; i < wordsList.size(); i++) {
wordsArray[i] = wordsList.get(i);
}
}
Methode Nr. 2. toArray-Methode
Wahrscheinlich die optimalste Verwendung. Die SchnittstelleList
verfügt über zwei Methoden toArray
, die ein Array aus der aktuellen Liste erstellen:
Object[] toArray();
T[] toArray(T[] a);
Die erste Methode gibt ein Array von Objekten zurück, das alle Elemente der aktuellen Liste enthält (vom ersten bis zum letzten):
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = (String[]) wordsList.toArray();
for (String word : wordsArray) {
System.out.println(word);
}
}
}
Lassen Sie uns die Methode ausführen main
und Folgendes sehen:
I
love
learning
on
JavaRush
Diese Methode weist jedoch eine Besonderheit auf: Sie gibt immer ein Array von Objekten zurück (Object[])
. Daher muss das zurückgegebene Ergebnis in den gewünschten Datentyp umgewandelt werden. Im obigen Beispiel wandeln wir es in ein Array von Strings um (String[])
. Diese Methode akzeptiert jedoch keine Argumente, was in manchen Situationen praktisch sein kann. Die zweite Methode gibt außerdem ein Array zurück, das alle Elemente der aktuellen Liste enthält (vom ersten bis zum letzten). Im Gegensatz zur ersten Methode verwendet die zweite Methode jedoch ein Array eines bestimmten Typs als Argument. Das Ergebnis der zweiten Methode ist jedoch kein Array von Objekten, sondern ein Array eines bestimmten Datentyps – derselbe wie der Datentyp in der als Argumente übergebenen Array-Methode.
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] wordsArray = wordsList.toArray(new String[0]);
for (String word : wordsArray) {
System.out.println(word);
}
}
}
Wenn wir die Methode ausführen main
, sehen wir in der Ausgabe dieselben Wörter:
I
love
learning
on
JavaRush
Lassen Sie uns ein wenig über das Array sprechen, das als Argument an übergeben wird toArray
. Die Logik der Methode hängt von der Länge des übertragenen Arrays ab. Es gibt drei mögliche Szenarien:
1. Die Länge des übertragenen Arrays ist kleiner als die Länge der Liste
In diesem Fall erstellt die Methode ein neues Array und platziert die Listenelemente darin. Wir haben dies im obigen Beispiel demonstriert.2. Die Länge des übergebenen Elements entspricht der Länge der Liste
Die Methode platziert die Listenelemente im übergebenen Array. Lassen Sie uns das demonstrieren:public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
// Создаем пустой массив нужной длины
String[] array = new String[wordsList.size()];
// Отправляем пустой массив в метод toArray
wordsList.toArray(array);
// Проверяем, заполнился ли наш массив. Спойлер: да
for (String word : array) {
System.out.println(word);
}
}
}
Bei der Ausgabe sehen wir alle gleichen Zeilen und es wird deutlich, dass die Methode das von uns erstellte Array gefüllt hat.
3. Die Länge des übertragenen Arrays ist größer als die Länge der Liste
Die Methode schreibt alle Elemente der Liste in ein Array und schreibt den Wert in die Zelle neben dem zuletzt hinzugefügten Elementnull
. Lassen Sie uns das demonstrieren:
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
// Создаем пустой массив, длина которого в 2 раза больше длины списка
String[] array = new String[wordsList.size() * 2];
for (int i = 0; i < array.length; i++) {
// В каждую ячейку запишем строковое представление текущего индекса
array[i] = String.valueOf(i);
}
// Отправляем массив в метод toArray
wordsList.toArray(array);
// Проверяем, что лежит в нашем массиве
for (String word : array) {
System.out.println(word);
}
}
}
Nachdem wir die Methode main
in der Konsole ausgeführt haben, sehen wir Folgendes:
I
love
learning
on
JavaRush
null
6
7
8
9
Welche der drei Methoden sollten Sie wählen? In früheren Java-Versionen war es optimal, ein Array mit einer Länge zu übergeben, die gleich oder größer als die Länge der Liste war. Moderne JVMs verfügen jedoch über Optimierungen und bieten in einigen Fällen eine schnellere Leistung für eine Methode, der ein Array mit einer kürzeren Länge als der Länge der Liste übergeben wird. Wenn Sie also eine moderne Version von Java ausführen, übergeben Sie der Methode ein leeres Array, wie wir es im ersten Beispiel getan haben:
wordsList.toArray(new String[0]);
Methode Nummer 3. Stream-API
Diese Methode eignet sich für diejenigen, die nicht nur eine Liste in ein Array umwandeln, sondern nebenbei auch einige andere Probleme lösen möchten. Und auch für Leute, die mit der Java Stream API vertraut sind. JavaRush hat einen guten Artikel zu diesem Thema . In diesem Abschnitt werden wir uns mehrere Beispiele für die Verwendung von Streams ansehen. So konvertieren Sie eine Liste mithilfe von Streams in ein Array:public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] strings = wordsList.stream()
.toArray(String[]::new);
for (String s : strings) {
System.out.println(s);
}
/*
Output:
I
love
learning
on
JavaRush
*/
}
}
Wenn Sie jedoch nur eine Liste in ein Array umwandeln müssen, ist es besser, dies mit der toArray
in Methode Nr. 2 beschriebenen Methode zu tun. Wenn Sie jedoch nicht nur eine Liste in ein Array umwandeln, sondern auch eine Aktion für jedes Element ausführen möchten, sind Sie hier genau richtig. Versuchen wir, die Liste in ein Array umzuwandeln, sodass im endgültigen Array alle Zeilen in Großbuchstaben geschrieben werden:
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] strings = wordsList.stream()
.map(str -> str.toUpperCase())
.toArray(String[]::new);
for (String s : strings) {
System.out.println(s);
}
/*
Output:
I
LOVE
LEARNING
ON
JAVARUSH
*/
}
}
Hier .map(str -> str.toUpperCase())
haben wir definiert, was mit jeder Zeile in der Liste gemacht werden muss. In diesem Fall haben wir uns entschieden, jede Zeichenfolge in Großbuchstaben umzuwandeln und sie dann in einem Array zusammenzufassen. Mit der Stream-API können Sie jeden Wert nicht nur transformieren, sondern auch filtern. Angenommen, wir möchten ein Array aus einer Liste von Zeichenfolgen zusammenstellen, jedoch so, dass nur Zeichenfolgen mit mehr als zwei Zeichen im Array enthalten sind:
public class Main {
public static void main(String[] args) {
List<String> wordsList = Arrays.asList("I", "love", "learning", "on", "JavaRush");
String[] strings = wordsList.stream()
.filter(str -> str.length() > 2)
.map(str -> str.toUpperCase())
.toArray(String[]::new);
for (String s : strings) {
System.out.println(s);
}
/*
Output:
LOVE
LEARNING
JAVARUSH
*/
}
}
Hier in der Zeile .filter(str -> str.length() > 2)
haben wir einen sogenannten Filter erstellt, der auf jedes Element der Liste angewendet wird, bevor es in das Array gelangt. In diesem Fall wird die Methode für jede Zeile aufgerufen length()
, und wenn das Ergebnis des Ausdrucks str.length() > 2
wahr ist, landet eine solche Zeile in der resultierenden Auswahl und letztendlich im Array. Sonst trifft es nicht. An dieser Stelle ist es vielleicht erwähnenswert, dass das Gleiche erreicht werden kann, indem man einfach die Elemente durchläuft und verschiedene Einschränkungen auferlegt. Sie können es auch so machen. Die Stream-API bietet einen funktionaleren Ansatz zur Lösung solcher Probleme.
Ergebnisse
In diesem Artikel haben wir uns verschiedene Möglichkeiten zum Konvertieren von Listen in Arrays angesehen:- einfache Suche;
- Methode
toArray;
- Stream-API.
toArray
Die beste Option besteht darin , die in der Schnittstelle definierte Methode zu verwenden List
. Es gibt zwei solcher Methoden:
Object[] toArray();
T[] toArray(T[] a);
GO TO FULL VERSION