2015-06-25 11 views
6

Nói rằng tôi có đoạn mã sauSử dụng nhiều chức năng bản đồ so với một tuyên bố khối trong một bản đồ trong một dòng java

data.stream() 
    .map(x -> { 
     Object a = maybeReturnsNull(x); 
     return a == null ? defaultValue : a; 
    }) 

Tôi có một số chức năng có thể được trở về null, và tôi áp dụng nó cho một yếu tố của luồng. Sau đó tôi muốn đảm bảo rằng bất kỳ kết quả null nào được thay đổi thành một số giá trị mặc định thay thế. Có sự khác biệt đáng kể nào giữa việc sử dụng hai bản đồ như trong ví dụ sau, so với sử dụng ví dụ trước xác định biến số trợ giúp a và sử dụng khối mã trong biểu thức lambda?

data.stream() 
    .map(x -> maybeReturnsNull(x)) 
    .map(x -> x == null ? defaultValue : x) 

Có hay không để tránh sử dụng câu lệnh chặn có hàm lambda?

+1

hoặc '.map (:: maybeReturnsNull này) .map (Không bắt buộc :: ofNullable) .map (o -> o.orElse (defaultValue))' – assylias

+2

@assylias: ngay cả khi nó không tạo sự khác biệt về hiệu suất, tôi nghĩ một '.map (x -> Optional.ofNullable (có thểReturnsNull (x)). hoặcElse (defaultValue))' nên được ưu tiên hơn ba bước ánh xạ tại đây. Nhưng mà, nó vẫn là vấn đề về hương vị… – Holger

Trả lời

7

Hoặc là tốt. Chọn cái có vẻ dễ đọc hơn đối với bạn. Nếu việc tính toán tự nhiên phân hủy, như cách này, thì nhiều bản đồ có thể dễ đọc hơn. Một số tính toán sẽ không tự nhiên phân hủy, trong trường hợp đó bạn đang mắc kẹt ở trước đây. Trong cả hai trường hợp, bạn không nên lo lắng rằng một người có hiệu suất cao hơn người kia; đó là phần lớn không được xem xét.

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