2014-07-17 27 views
8

Xin chào các bạn có một số List<User> và tôi muốn thêm phương thức trả về một Người dùng cụ thể được tìm thấy bằng Id. Tôi muốn làm cho rằng bằng cách sử dụng biểu thức lambda vì vậy tôi đã cố gắng này, nhưng nó không hoạt động.Chọn đối tượng từ danh sách của đối tượng sử dụng biểu thức lambda

... 
List<User> user = users.stream().filter(x -> x.id == id).collect(Collectors.toList()); 
return user[0]; 

đang doesnt này biên soạn và cung cấp cho tôi những lỗi:

The method stream() is undefined for the type List<User> 
Lambda expressions are allowed only at source level 1.8 or above * 
Collectors cannot be resolved 
  • Tôi đang sử dụng eclipse 4.4.3 Kepler và tôi đã cài đặt java 8 trong máy và các plugin cho làm việc với java8 trong eclipse
+0

kiểm tra mức tuân thủ .. Goto project> properties> Java Compiler. Đặt mức tuân thủ thành 1.8 –

Trả lời

19

Lời khuyên: Nếu bạn muốn yếu tố chỉ đầu tiên matchig một điều kiện, không thu thập tất cả các yếu tố vào danh sách (đó là một chút quá mức cần thiết), sử dụng findFirst() phương pháp thay vì:

return users.stream().filter(x -> x.id == id).findFirst().get(); 

Lưu ý rằng findFirst() sẽ trả lại đối tượng Optionalget() sẽ ném một ngoại lệ nếu không có yếu tố như vậy.

+1

+1 cho phương thức 'findFirst()' :) –

4

Bạn có hai vấn đề.

  • Bạn phải bật Java 1.8. Mức tuân thủ trong Eclipse và nhập thành công các lớp/giao diện cụ thể của Java8. Những gì bạn phải làm là như sau:

    1. Nhấp chuột phải vào dự án và chọn Properties
    2. Chọn Java Compiler trong cửa sổ đã được mở
    3. Dưới JDK Compliance bỏ chọn hộp kiểm Use compliance level from execution environment.... và sau đó chọn 1.8 từ trình đơn thả xuống Compliance level.
    4. Nhấp vào OK và bạn đã hoàn tất.

Sau khi bạn làm điều đó, bạn sẽ nhận thấy rằng tuyên bố return không biên dịch. Điều này là do đối tượng List trong Java không phải là một mảng và do đó các câu lệnh như user[0] không hợp lệ cho danh sách. Những gì bạn phải làm là:

return user.get(0); 
Các vấn đề liên quan