2017-02-20 37 views
7

tôi đã viết biểu thức lambda sauJava/Eclipse: "biểu thức Lambda có thể không được sử dụng trong một biểu đánh giá"

int size = ((List<?>) receipt.getPositions().stream().filter(item -> true).collect(Collectors.toList())).size() 

Biến size được tính chính xác!

Nhưng khi tôi cố gắng để kiểm tra nó (Ctrl + phím Shift + tôi) hoặc thử để xem kết quả của biểu thức trong Eclipse biểu xem, tôi nhận được lỗi sau:

"Lambda biểu thức không thể được sử dụng trong một biểu đánh giá"

enter image description here

có bất kỳ cơ hội khác để xem kết quả của một biểu thức như vậy thay vì lưu nó vào một biến?

P.S .: Tôi đang sử dụng Java 8 và Eclipse neon.2

+1

Nếu bạn sử dụng công cụ tìm kiếm trên internet, thông báo lỗi "Biểu thức Lambda không thể được sử dụng trong biểu thức đánh giá" sẽ tìm thấy một số thông tin về điều đó. Câu trả lời cơ bản là không, nhưng có lẽ trong tương lai có. –

+2

Ngoài ra: tại sao không chỉ sử dụng count() thay vì thu thập (...). Size()? –

+0

Chỉ cần sử dụng 'receipt.getPositions(). Size()'. Điều này có thể được đánh giá bởi trình gỡ rối mà không có vấn đề gì. – Holger

Trả lời

0

Một giải pháp đơn giản cho điều này, mà làm việc là để chuyển đổi lambda của bạn trong một tạo lớp nặc danh. Tạo một biến giao diện cần thiết, bạn sẽ nhận được một biểu thức có thể gỡ lỗi.

Predicate<Object> predicate = new Predicate<Object>() { 
     @Override 
     public boolean test(Object item) { 
      return true; 
     } 
    }; 
    int size = ((List<?>) receipt.getPositions().stream().filter(predicate).collect(Collectors.toList())).size(); 

Bây giờ, nếu bạn đang đứng tại dòng "kích thước int = ...", trong khi gỡ lỗi, bạn có thể xem kết quả của sau:

((List<?>) receipt.getPositions().stream().filter(predicate).collect(Collectors.toList())).size() 

Tôi hy vọng nó sẽ giúp :)

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