ดูเหมือนว่าฉันมีปัญหาในการเข้าใจวิธีที่ 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
การดำเนินการตัวกรองที่ซ้ำซ้อนนี้ดูเหมือนว่าจะเปลี่ยนพฤติกรรมของไปป์ไลน์ที่สร้างขึ้นได้อย่างไร