Iterable zum Streamen in Java

1. Übersicht

In diesem kurzen Tutorial konvertieren wir ein Java Iterable- Objekt in einen Stream und führen einige Standardoperationen damit aus.

2. Konvertieren von Iterable in Stream

Die Iterable- Schnittstelle wurde unter Berücksichtigung der Allgemeinheit entwickelt und bietet keine eigene stream () -Methode.

Einfach ausgedrückt, können Sie es an die StreamSupport.stream () -Methode übergeben und einen Stream von der angegebenen Iterable- Instanz abrufen .

Betrachten wir unsere Iterable- Instanz:

Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");

Und so können wir diese Iterable- Instanz in einen Stream konvertieren :

StreamSupport.stream(iterable.spliterator(), false);

Beachten Sie, dass der zweite Parameter in StreamSupport.stream () bestimmt, ob der resultierende Stream parallel oder sequentiell sein soll. Sie sollten es für einen parallelen Stream auf true setzen .

Testen wir nun unsere Implementierung:

@Test public void givenIterable_whenConvertedToStream_thenNotNull() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false)); }

Außerdem eine kurze Randnotiz: Streams können nicht wiederverwendet werden, während Iterable dies ist. Es bietet auch eine spliterator () -Methode, die eine java.lang.Spliterator-Instanz über die von der angegebenen Iterable beschriebenen Elemente zurückgibt .

3. Durchführen des Stream- Vorgangs

Lassen Sie uns eine einfache Stream-Operation ausführen:

@Test public void whenConvertedToList_thenCorrect() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); List result = StreamSupport.stream(iterable.spliterator(), false) .map(String::toUpperCase) .collect(Collectors.toList()); assertThat( result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM")); }

4. Fazit

Dieses einfache Tutorial zeigt, wie Sie eine Iterable- Instanz in eine Stream- Instanz konvertieren und Standardoperationen ausführen können, genau wie Sie es für jede andere Collection- Instanz getan hätten .

Die Implementierung aller Codefragmente finden Sie im Github-Projekt.