Thẻ

#java

99 Ngày Java — Ngày 58: Optional

Optional là công cụ cho kiểu trả về — không field, không tham số, không bọc collection; chuỗi map/flatMap/filter thay kim tự tháp if; orElse luôn tính tham số còn orElseGet lười, orElseThrow cho “không có là lỗi” — và các anti-pattern isPresent + get, orElse(null).

23 thg 9, 20269 phút9
So sánh EasyExcel và Apache Fesod: khác biệt thật nằm ở đâu?

Fesod là hậu duệ của EasyExcel, cùng engine SAX/SXSSF. Khác biệt kiểm chứng được: vòng đời dự án, POI 5.2.5 vs 5.5.1, các API mới (numRows, csv(), headerMergeStrategy) và độ bền với file xấu — không phải hiệu năng gấp nhiều lần.

23 thg 9, 20268 phút1
99 Ngày Java — Ngày 57: Collectors chuyên sâu

Ba bẫy của toMap — trùng khóa, giá trị null, kiểu map; groupingBy với downstream counting/summingInt/mapping và gom nhiều cấp bằng record; partitioningBy luôn đủ hai khóa; filtering giữ nhóm rỗng, teeing gộp hai collector trong một lượt, collectingAndThen gỡ Optional của maxBy.

22 thg 9, 202611 phút1
99 Ngày Java — Ngày 56: Terminal operations

Năm họ phép kết thúc nhận ra bằng kiểu trả về, stream chỉ dùng một lần, reduce với identity trung hòa và collect cho container, toList() không sửa được — và vì sao allMatch trả true trên tập rỗng còn findAny không hứa trả phần tử đầu.

21 thg 9, 202610 phút3
99 Ngày Java — Ngày 55: Intermediate operations

Phân biệt map và flatMap bằng kiểu trả về, distinct im lặng không lọc gì nếu thiếu equals, sorted phá vỡ tính lười, peek không được đảm bảo chạy — và vì sao skip không phải cách phân trang dữ liệu từ database.

20 thg 9, 20268 phút6
99 Ngày Java — Ngày 54: Stream API nhập môn

Dây chuyền ba phần và luật không có phép kết thúc thì không chạy gì, tính lười cho ngắt sớm và dữ liệu vô hạn, vì sao lọc trước sắp sau nhanh hơn hàng chục lần — và khi nào vòng lặp vẫn thắng.

19 thg 9, 20268 phút6
99 Ngày Java — Ngày 53: Method reference

Bốn loại và loại thứ ba hay nhầm nhất, khi nào method reference dễ đọc hơn lambda và khi nào không, cái bẫy NPE nổ ngay lúc tạo reference — cùng nơi nó đáng giá nhất: Comparator và groupingBy.

18 thg 9, 20267 phút5
99 Ngày Java — Ngày 52: Functional interface

Bốn interface phân biệt bằng hai câu hỏi — nhận gì vào, trả gì ra; biến thể nguyên thủy tránh boxing; vì sao chỉ nên dùng andThen — và khi nào tự viết interface là đúng, kể cả để lách checked exception.

17 thg 9, 20268 phút5
99 Ngày Java — Ngày 51: Lambda expression

Bốn dạng cú pháp và lý do lược bớt được, vì sao lambda KHÔNG phải anonymous class viết gọn — this trỏ khác chỗ và nó dựng bằng invokedynamic — cùng lý do thật đằng sau luật effectively final.

16 thg 9, 20268 phút6