JavaRush /Java-Blog /Random-DE /Java-Liste in Array: Konvertieren Sie eine Liste von Elem...
Анзор Кармов
Level 31
Санкт-Петербург

Java-Liste in Array: Konvertieren Sie eine Liste von Elementen in ein Array

Veröffentlicht in der Gruppe Random-DE
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. Java-Liste in Array: Konvertieren Sie eine Liste von Elementen in ein Array - 1Lassen 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");
varargsDiese 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 Schnittstelle Listverfü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 mainund 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 Element null. 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 mainin 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 toArrayin 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() > 2wahr 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;
  • MethodetoArray;
  • Stream-API.
toArrayDie beste Option besteht darin , die in der Schnittstelle definierte Methode zu verwenden List. Es gibt zwei solcher Methoden:
  • Object[] toArray();
  • T[] toArray(T[] a);
Der erste akzeptiert keine Argumente, sondern gibt ein Array von Objekten zurück, weshalb Sie in den meisten Fällen auf eine explizite Typumwandlung zurückgreifen müssen. Der zweite gibt ein Array des gewünschten Typs zurück, akzeptiert jedoch ein Array als Argument. Übergeben Sie der Methode am besten ein leeres Array, dann werden Sie zufrieden sein. Mit der Stream-API können Sie nicht nur eine Liste in ein Array konvertieren, sondern auch einige Aktionen nebenbei ausführen, z. B. Elemente filtern oder konvertieren, bevor Sie sie dem Array hinzufügen.

Hausaufgaben

Versuchen Sie, alle Beispiele aus diesem Artikel selbst zu wiederholen, verwenden Sie jedoch anstelle der ursprünglichen Zeichenfolgenliste eine Liste mit ganzen Zahlen von 0 bis 10. Natürlich müssen Sie einige Bedingungen aus den Beispielen, die nur für Zeichenfolgen gelten, an die neuen anpassen Bedingungen.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION