Здається, у мене виникають проблеми з розумінням того, як 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
Як ця, здавалося б, надмірна робота фільтра змінює поведінку складеного потокового трубопроводу?