使用 lambda 表达式从对象列表中选择对象

2022-09-03 17:50:57

我有一个,我想添加一个方法,返回使用Id找到的特定用户。我想使用lambda表达式制作它,所以我已经尝试过了,但它不起作用。List<User>

...
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 Kepler,我已经在机器中安装了java 8,并在eclipse中使用java8的插件。

答案 1

建议:如果你只想匹配一个条件的第一个元素,不要收集所有元素来列出(这有点过分),改用方法:findFirst()

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

请注意,将返回一个 Optional 对象,如果没有此类元素,将引发异常。findFirst()get()


答案 2

你有两个问题。

  • 您必须启用 Java 1.8。Eclipse 中的合规性级别,并成功导入 Java8 特定的类/接口。您所要做的是:

    1. 右键单击项目,然后选择Properties
    2. 在已打开的窗口中选择Java Compiler
    3. 在“取消选中”复选框下,然后从下拉列表中进行选择。JDK ComplianceUse compliance level from execution environment....1.8Compliance level
    4. 单击并完成。OK

执行此操作后,您会注意到语句未编译。这是因为 Java 中的对象不是数组,因此像这样的语句对于列表是无效的。您要做的是:returnListuser[0]

return user.get(0);

推荐