1082 Stimmen

Wie konvertiert man einen Java 8 Stream zu einem Array?

Was ist der einfachste/kürzeste Weg, einen Java 8 Stream in ein Array umzuwandeln?

1614voto

skiwi Punkte 62821

Die einfachste Methode besteht darin, die Methode toArray(IntFunction generator) mit einem Array-Konstruktor-Verweis zu verwenden. Dies wird in der API-Dokumentation für die Methode vorgeschlagen.

String[] stringArray = stringStream.toArray(String[]::new);

Was es macht, ist eine Methode zu finden, die eine Ganzzahl (die Größe) als Argument akzeptiert und einen String[] zurückgibt, was genau das ist, was (eine der Überladungen von) new String[] macht.

Sie könnten auch Ihre eigene IntFunction schreiben:

Stream stringStream = ...;
String[] stringArray = stringStream.toArray(size -> new String[size]);

Der Zweck des IntFunction generator besteht darin, eine Ganzzahl, die Größe des Arrays, in ein neues Array umzuwandeln.

Beispielcode:

Stream stringStream = Stream.of("a", "b", "c");
String[] stringArray = stringStream.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);

Gibt aus:

a
b
c

66voto

Ida Bucić Punkte 909

Wenn Sie ein Array von ints mit Werten von 1 bis 10 aus einem Stream erhalten möchten, steht Ihnen IntStream zur Verfügung.

Hier erstellen wir einen Stream mit einer Stream.of-Methode und wandeln einen Stream mit einem mapToInt in einen IntStream um. Dann können wir die toArray-Methode von IntStream aufrufen.

Stream stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
//oder verwenden Sie das, um unseren Stream zu erstellen
//Stream stream = IntStream.rangeClosed(1, 10).boxed();
int[] array =  stream.mapToInt(x -> x).toArray();

Hier ist dasselbe, ohne den Stream, nur mit dem IntStream:

int[]array2 =  IntStream.rangeClosed(1, 10).toArray();

34voto

Sie können einen Java 8-Stream mit diesem einfachen Code-Block in ein Array konvertieren:

 String[] myNewArray3 = myNewStream.toArray(String[]::new);

Aber lassen Sie uns die Dinge genauer erklären, zuerst erstellen wir eine Liste von Strings mit drei Werten:

String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};

Erstellen Sie einen Stream aus dem gegebenen Array:

Stream stringStream = Arrays.stream(stringList);

Jetzt können wir einige Operationen auf diesem Stream durchführen z.B:

Stream myNewStream = stringStream.map(s -> s.toUpperCase());

und schließlich konvertieren Sie es in ein Java 8-Array mit diesen Methoden:

1-Klassische Methode (Funktionales Interface)

IntFunction intFunction = new IntFunction() {
    @Override
    public String[] apply(int value) {
        return new String[value];
    }
};

String[] myNewArray = myNewStream.toArray(intFunction);

2 -Lambda-Ausdruck

 String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);

3- Methodenreferenz

String[] myNewArray3 = myNewStream.toArray(String[]::new);

Erklärung der Methodenreferenz:

Es ist eine weitere Möglichkeit, einen Lambda-Ausdruck zu schreiben, der streng äquivalent zu den anderen ist.

18voto

Danail Tsvetanov Punkte 433

Text in ein String-Array umwandeln, wobei jeder Wert durch ein Komma getrennt wird, und jedes Feld trimmen, zum Beispiel:

String[] stringArray = Arrays.stream(line.split(","))          
                             .map(String::trim)
                             .toArray(String[]::new);

7voto

Sma Ma Punkte 2567
import java.util.List;
import java.util.stream.Stream;

class Main {

    public static void main(String[] args) {
        // Erstellen Sie einen Stream von Zeichenfolgen aus einer Liste von Zeichenfolgen
        Stream myStreamOfStrings = List.of("lala", "foo", "bar").stream();

        // Konvertieren Sie den Stream in ein Array, indem Sie die Methode toArray verwenden
        String[] myArrayOfStrings = myStreamOfStrings.toArray(String[]::new);

        // Ergebnisse ausgeben
        for (String string : myArrayOfStrings) {
            System.out.println(string);
        }
    }
}

Probieren Sie es online aus: https://repl.it/@SmaMa/Stream-to-array

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X