2014-07-17 180 views
8

嗨,大家好,我有一個List<User>,我想添加一個返回使用Id找到的特定用戶的方法。我想使用lambda表達式,所以我試過這個,但它不起作用。使用lambda表達式從對象列表中選擇對象

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

此代碼這麼想的編譯和給我的這些錯誤:

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 
  • 我使用的Eclipse 4.4.3開普勒和我在機器上安裝的Java 8和插件在eclipse中使用java8
+0

檢查合規性級別。轉到項目>屬性> Java編譯器。爲'findFirst()'方法設置合規性級別爲1.8 –

回答

19

建議:如果你只想第一要素相配套的條件,不收取到列表中的所有元素(這是一個有點矯枉過正),使用findFirst()方法代替:

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

請注意,findFirst()將返回一個Optional對象,並且get()將拋出一個異常,如果沒有這樣的元素。

+1

+1) –

4

您有兩個問題。

  • 您必須啓用Java 1.8。 Eclipse中的合規性級別,併成功導入Java8特定的類/接口。你所要做的是:

    1. 在項目上單擊右鍵,並在已打開
    2. JDK Compliance取消選中Use compliance level from execution environment....複選框的窗口中選擇Properties
    3. 選擇Java Compiler,然後從中選擇1.8Compliance level下拉。
    4. 點擊OK和你完成。

之後你這樣做,你會發現,return聲明沒有編制。這是因爲Java中的List對象不是數組,因此像user[0]這樣的語句對列表無效。你所要做的是:

return user.get(0); 
相關問題