Iterierbar zum Streaming in Java
1. Überblick
In diesem kurzen Tutorial konvertieren wir ein JavaIterable-Objekt in einStream und führen einige Standardoperationen damit aus.
2. Konvertieren vonIterable inStream
DieIterable-Schnittstelle wurde unter Berücksichtigung der Allgemeinheit entwickelt und bietet keine eigenestream()-Methode.
Einfach ausgedrückt, können Sie es an die MethodeStreamSupport.stream()übergeben und von der angegebenen InstanzIterableeinStreamerhalten.
Betrachten wir die Instanz vonIterable:
Iterable iterable
= Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
Und so können wir dieseIterable-Instanz inStream: konvertieren
StreamSupport.stream(iterable.spliterator(), false);
Beachten Sie, dass der zweite Parameter inStreamSupport.stream() bestimmt, ob die resultierendenStream parallel oder sequentiell sein sollen. Sie sollten es für paralleleStream 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ährendIterable ist. Es bietet auch einespliterator()-Methode, die einjava.lang.Spliterator instance über die durch die angegebenenIterable beschriebenen Elemente zurückgibt.
3. Stream Operation ausführen
Führen wir eine einfache Stream-Operation aus:
@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 eineIterable-Instanz in eineStream-Instanz konvertieren und Standardoperationen ausführen können, genau wie Sie es für jede andereCollection-Instanz getan hätten.
Die Implementierung aller Codefragmente finden Sie inGithub project.