大家好我有一个List<User>
我希望添加一个返回使用Id找到的特定用户的方法。我想使用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
答案 0 :(得分:21)
建议:如果你只想要第一个元素匹配条件,不要收集要列出的所有元素(它有点矫枉过正),请改用findFirst()
方法:
return users.stream().filter(x -> x.id == id).findFirst().get();
请注意,findFirst()
将返回Optional个对象,如果没有此类元素,get()
将抛出异常。
答案 1 :(得分:4)
你有两个问题。
您必须启用Java 1.8。 Eclipse中的合规性级别,并成功导入Java8特定的类/接口。你要做的是以下几点:
Properties
Java Compiler
JDK Compliance
下,取消选中Use compliance level from execution environment....
复选框,然后从1.8
下拉列表中选择Compliance level
。OK
和您的完成。执行此操作后,您会注意到return
语句未编译。这是因为Java中的List
对象不是数组,因此user[0]
之类的语句对列表无效。你要做的是:
return user.get(0);
答案 2 :(得分:0)
您可以使用 Java 8 Stream API 返回列表中通过 Id 找到的特定用户。看看这个link。
User user = users.stream()
.filter(x -> x.id == id)
.findAny()
.orElse(null);
为方便起见,如果 Optional 为空,我们默认为 null,但这可能并不总是适用于每种情况的最佳选择。