Tag: streams
22 รายการ
Blog

Gatherers4j 0.15.0 เพิ่มสถิติใน Java Streams อัปเกรดแล้วต้องเช็กอะไร
Gatherers4j เพิ่มสถิติแบบช่วงล่าสุดและแบบสะสม ช่วยงานรายงานใน Java พร้อมจุดเปลี่ยนเรื่องการปัดเศษ ชื่อเมธอด และ JDK ที่ทีมควรตรวจให้งานเดิมไม่สะดุด
Bun 1.4.3 CompressionStream: ตั้งระดับบีบอัดให้ตรง latency budget
ใช้ CompressionStream level เลือกสมดุล CPU กับขนาดข้อมูล พร้อม Bun test แบบ round-trip โดยไม่พึ่งเครือข่าย
Java Scanner.tokens: เปลี่ยน token stream เป็น pipeline ที่ปิด resource ชัดเจน
ใช้ Scanner.tokens กับ delimiter, filter และ try-with-resources พร้อม Java 17 assertions
Java Collectors.toUnmodifiableMap: ปิดการแก้โครงสร้างหลัง stream
ใช้ toUnmodifiableMap สร้างผลลัพธ์ที่เพิ่มหรือลบไม่ได้ พร้อมทดสอบ duplicate key, null และ mutable value
Java Stream.iterate แบบมี hasNext: สร้างลำดับมีขอบเขตโดยไม่พึ่ง limit เดา ๆ
ใช้ Stream.iterate(seed, hasNext, next) สร้างช่วงตามเงื่อนไข พร้อม Java 17 assertions และขอบเขต overflow กับ non-progressing step
Java Pattern.asMatchPredicate: ใช้ regex แบบตรงทั้งข้อความใน Stream
แยก full match จาก find semantics ให้ชัด พร้อมทดสอบ filter ของรหัสงานและกรณีมีข้อความเกิน
Java OptionalInt.stream: ต่อค่าที่อาจไม่มีเข้ากับ IntStream
แปลงผล parse แบบ zero-or-one ให้เข้ากับ primitive stream โดยไม่ใช้ sentinel หรือ boxing เกินจำเป็น
Java collectingAndThen: เก็บข้อมูลก่อน แล้วล็อกผลลัพธ์ตอนจบ
ใช้ Collectors.collectingAndThen เพิ่ม finishing step เช่น unmodifiable list โดยไม่กระจาย post-processing นอก stream
Java LocalDate.datesUntil: เดินช่วงวันแบบไม่พลาดขอบเขตท้าย
สร้าง Stream ของวันที่แบบ end-exclusive พร้อม step และป้องกัน off-by-one ในรายงาน
Java Pattern.asPredicate: เปลี่ยน regex เป็นตัวกรองที่ประกอบกับ Stream ได้
ใช้ Pattern.asPredicate กับ Stream โดยแยก find ออกจาก matches และคอมไพล์ regex เพียงครั้งเดียว
Java Predicate.not: ปฏิเสธเงื่อนไขโดยยังอ่านเป็นประโยค
ใช้ Predicate.not กับ method reference ใน stream พร้อมแยก null policy ให้เห็นชัด
Java summarizingInt: เก็บ count, min, max, sum และ average ใน pass เดียว
ใช้ IntSummaryStatistics สรุปข้อมูลจาก stream พร้อมจัดการ empty input และ overflow ของ mapper
Stream.gather(Gatherers.windowFixed): หั่นสตรีมเป็นหน้าต่างขนาดคงที่ (Java 24+)
ใช้ Gatherers.windowFixed / windowSliding เป็น intermediate operation บน Stream API พร้อมตัวอย่างแนวคิดจาก JDK docs
Java Collectors.flatMapping: รวมสมาชิกย่อยต่อกลุ่มโดยไม่เก็บ List ซ้อน
ใช้ flatMapping downstream ของ groupingBy เพื่อรวม tag ต่อทีม พร้อมจัดการ stream ย่อยและค่า null ให้ชัด
Java Collectors.filtering: กรองสมาชิกแต่ยังเก็บกลุ่มที่ผลลัพธ์เป็นศูนย์
วาง filtering ไว้ downstream ของ groupingBy เพื่อรักษา key ของกลุ่ม พร้อมเทียบกับการ filter stream ก่อนจัดกลุ่ม
Java Optional.stream: แบนค่าที่อาจหายโดยไม่แตก pipeline เป็น if
ใช้ Optional.stream รวมผล lookup หลายรายการเป็น Stream เดียว พร้อมรักษาความหมายของค่าที่ไม่พบ
Java Stream.mapMulti: คืนศูนย์หรือหลายผลลัพธ์โดยไม่สร้าง Stream ย่อยทุกครั้ง
ใช้ mapMulti แทน flatMap เมื่อแต่ละ input อาจไม่คืนค่า หรือคืนหลายค่า พร้อมตัวอย่าง Java 17 ที่รัน assertions จริง
Java Collectors.toMap: กำหนดชะตา key ซ้ำก่อน pipeline พังกลางทาง
ใช้ merge function ของ Collectors.toMap รวมข้อมูล key ซ้ำอย่างตั้งใจ พร้อมแยกกรณี sum, keep-first และข้อมูลผิด schema

Java Collectors.teeing: สรุปสตรีมสองมุมในครั้งเดียว
ใช้ Collectors.teeing รวมผล average กับ count จากสตรีมเดียว พร้อมเมธอด main และการ assert
Java String.lines: อ่านข้อความหลายบรรทัดแบบ Stream โดยไม่ทิ้งท้ายด้วยช่องว่างปลอม
ใช้ lines แทน regex split เมื่อต้องประมวลผลบรรทัดตามนิยาม line terminator ของ Java
Java Collectors.partitioningBy: แบ่ง Stream เป็นสองฝั่งด้วย predicate เดียว
ใช้ partitioningBy เมื่อต้องการทั้งกลุ่ม true และ false พร้อมเทียบกับ filter สองรอบ
Java Collectors.teeing: สรุปสองค่าใน stream pass เดียว
ใช้ teeing จับคู่ collector สองตัวโดยไม่ traverse stream ซ้ำ พร้อม trade-off ด้าน readability และ parallel reduction