Кажется, у меня проблемы с пониманием того, как Java объединяет потоковые операции в потоковый конвейер.
При выполнении следующего кода
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());
}
Консоль только печатает 4
. StringBuilder
Объект все еще имеет значение ""
.
Когда я добавляю операцию фильтра: 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());
}
Выход изменяется на:
4
1234
Как эта, казалось бы, избыточная операция фильтра меняет поведение составного потокового конвейера?