Java IntStream-Konvertierungen

1. Einleitung

In diesem kurzen Tutorial werden wir alle Möglichkeiten für IntStream- Konvertierungen in andere Typen durchgehen .

Als Ergänzung zu diesem Tutorial werden interessante Lesungen zum Thema Boxen und Unboxing oder Iterieren empfohlen.

2. IntStream to Array

Lassen Sie uns untersuchen, wie wir von einem IntStream- Objekt in ein Array von int s konvertieren können .

In diesem Beispiel generieren wir die ersten 50 geraden Zahlen und speichern sie als Ergebnis in einem Array:

@Test public void intStreamToArray() { int[] first50EvenNumbers = IntStream.iterate(0, i -> i + 2) .limit(50) .toArray(); assertThat(first50EvenNumbers).hasSize(50); assertThat(first50EvenNumbers[2]).isEqualTo(4); }

Zuerst erstellen wir einen unendlichen Strom von Ganzzahlen, beginnend bei 0 und iterierend, indem wir jedem Element 2 hinzufügen. Unmittelbar danach müssen wir eine Zwischen Betrieb hinzufügen Grenze , um diesen Vorgang zu machen, irgendwie zu beenden.

Verwenden wir zum Schluss die Abschlussoperation collect , um diesen Stream in einem Array zu sammeln .

Dies ist eine einfache Methode zum Generieren eines Arrays von int s .

3. IntStream to List

Lassen Sie uns nun einen IntStream in eine Liste von Ganzzahlen konvertieren .

In diesem Fall wird die Methode nur zu mehr Vielfalt am Beispiel hinzufügen, lassen Sie uns verwenden Bereich statt der Methode iterate . Diese Methode generiert einen IntStream von int 0 bis int 50 (nicht enthalten, da es sich um einen offenen Bereich handelt):

@Test public void intStreamToList() { List first50IntegerNumbers = IntStream.range(0, 50) .boxed() .collect(Collectors.toList()); assertThat(first50IntegerNumbers).hasSize(50); assertThat(first50IntegerNumbers.get(2)).isEqualTo(2); }

In diesem Beispiel verwenden wir die Methode Bereich . Der berüchtigtste Teil hier ist die Verwendung der Methode boxed , die, wie der Name schon sagt , alle int- Elemente im IntStream boxt und einen Stream zurückgibt .

Schließlich können wir einen Kollektor verwenden, um eine Liste von ganzen Zahlen zu erhalten.

4. IntStream to String

Lassen Sie uns für unser letztes Thema untersuchen, wie wir einen String aus einem IntStream erhalten können .

In diesem Fall generieren wir nur die ersten 3 int s (0, 1 und 2):

@Test public void intStreamToString() { String first3numbers = IntStream.of(0, 1, 2) .mapToObj(String::valueOf) .collect(Collectors.joining(", ", "[", "]")); assertThat(first3numbers).isEqualTo("[0, 1, 2]"); }

In diesem Fall erstellen wir zunächst einen IntStream mit dem Konstruktor IntStream.of () . Nachdem wir den Stream haben , müssen wir irgendwie einen Stream aus einem IntStream generieren . Daher können wir die Zwischenmethode mapToObj verwenden , die einen IntStream verwendet und einen Stream vom Typ des resultierenden Objekts zurückgibt , das in der aufgerufenen Methode zugeordnet ist.

Schließlich verwenden wir die Collector- Verknüpfung , die einen Stream verwendet und jedes Element des Streams mithilfe eines Trennzeichens und optional eines Präfixes und Suffix anhängen kann .

5. Schlussfolgerungen

In diesem kurzen Tutorial haben wir alle Alternativen untersucht, wenn wir einen IntStream in einen anderen Typ konvertieren müssen . Insbesondere haben wir Beispiele wie das Generieren eines Arrays, einer Liste und eines Strings durchgearbeitet .

Und wie immer ist der Beispielcode auf GitHub verfügbar.