2016-02-24 29 views
7

Tôi vừa bắt đầu làm việc với Java 8. Tôi thấy rất nhiều luồng và tùy chọn. Một câu hỏi xuất hiện trong đầu tôi. Hãy xem xét ví dụ sau đây được lấy từ this oracle tutorial:Báo cáo bảo hiểm trong Java 8

String name = computer.flatMap(Computer::getSoundcard) 
          .flatMap(Soundcard::getUSB) 
          .map(USB::getVersion) 
          .orElse("UNKNOWN"); 

Hoặc kế tiếp lấy từ here:

List<String> myList = new ArrayList(); 

myList 
    .stream() 
    .filter(s -> s.startsWith("c")) 
    .map(String::toUpperCase) 
    .sorted() 
    .forEach(System.out::println); 

Có bất kỳ giải pháp bảo hiểm, có thể cho tôi biết nếu orElse trong đoạn đầu tiên được sử dụng? Hoặc một số khác, mà nói với tôi rằng đóng cửa filter đã không được gọi là ở tất cả, kể từ khi danh sách đã được sản phẩm nào? Có thể báo cáo nào, rằng phương pháp tham chiếu trong forEach không được sử dụng?

+0

Việc sử dụng dữ liệu cho thử nghiệm của bạn thêm un tùy chọn mà không cần bất kỳ giá trị và kiểm tra xem chưa biết xuất hiện. – JEY

+1

Lệnh gọi 'orElse' sẽ luôn xảy ra và đối số của nó luôn được đánh giá trước khi yêu cầu xảy ra, do đó vùng phủ sóng của nó không cần đánh giá. Trong trường hợp các biểu thức lambda, chúng được desugared thành các phương thức tổng hợp trong quá trình biên dịch sao cho tất cả các mã được cập nhật cũng có thể xử lý chúng. – Holger

+3

Bạn được đảm bảo rằng mọi thao tác trong "đường ống" sẽ bị ảnh hưởng khi bạn sử dụng thao tác "thiết bị đầu cuối" trên luồng của mình. Vì vậy, không thực sự là một nhu cầu bảo hiểm. – fge

Trả lời

1

Ít nhất Clover dường như hỗ trợ bảo hiểm cho đóng cửa. Xem this mục nhập blog!

Ví dụ trong Intellij:

enter image description here

Các vấn đề liên quan