Wygląda na to, że mam problem ze zrozumieniem, w jaki sposób Java komponuje operacje strumieniowe do potoku strumieniowego.
Podczas wykonywania następującego kodu
public
static void main(String[] args) {
StringBuilder sb = new StringBuilder();
var count = Stream.of(new String[]{"1", "2", "3", "4"})
.map(sb::append)
.count();
System.out.println(count);
System.out.println(sb.toString());
}
Konsola drukuje tylko 4
. StringBuilder
Obiekt nadal ma wartość ""
.
Po dodaniu operacji filtrowania: filter(s -> true)
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
var count = Stream.of(new String[]{"1", "2", "3", "4"})
.filter(s -> true)
.map(sb::append)
.count();
System.out.println(count);
System.out.println(sb.toString());
}
Wyjście zmienia się na:
4
1234
W jaki sposób ta pozornie zbędna operacja filtrowania zmienia zachowanie złożonego potoku strumienia?