Tôi mới để lập trình chức năng trong java, và tự hỏi làm thế nào tôi nên mã hóa để tránh NPE trong (ví dụ) hoạt động này:.gọi suối() giảm() trên một danh sách với chỉ có một yếu tố
myList.stream()
.reduce((prev, curr) -> prev.getTimestamp().isAfter(curr.getTimestamp()) ? prev : curr);
.get().getTimestamp();
Mục đích của tôi ở đây là tìm dấu thời gian của đối tượng mới nhất trong danh sách. Gợi ý về cách thu thập phần tử cuối cùng tốt hơn là rất đáng hoan nghênh, nhưng câu hỏi chính của tôi ở đây thực sự là lý do tại sao nó hoạt động.
Các tài liệu nói rằng chức năng ném một NullPointerException
"nếu kết quả của việc giảm là null":
Đó là OK, nhưng những gì tôi không hoàn toàn hiểu là tại sao tôi don' t nhận được một NullPointerException
khi mã này được chạy với một danh sách chỉ chứa một phần tử. Tôi mong đợi prev
là vô giá trị trong trường hợp này. Tôi đã thử gỡ lỗi, nhưng nó dường như chỉ bước qua toàn bộ biểu thức lambda khi chỉ có một phần tử.
Lưu ý rằng thao tác này sẽ chỉ trả lại dấu thời gian mới nhất chứ không phải đối tượng có dấu thời gian mới nhất. – skiwi
Cảm ơn, tôi biết điều đó và dấu thời gian là những gì tôi muốn. – aweibell