我有以下代码:
public List<Entry> getEntriesForUserId(int userId) {
User u = DataBaseConnector
.getAllUsers()
.stream()
.filter(user -> user.getUserId() == userId)
.findFirst()
.orElse(new User(-1, "Error");
return u.getEntries();
}
getEntries()
返回一个List<Entry>
。
如何将return语句添加到此lambda表达式中?就像是
.map(User::getEntries)
?
答案 0 :(得分:6)
您不需要lambda即可返回列表,您可以说:
public List<Entry> getEntriesForUserId(int userId) {
return DataBaseConnector
.getAllUsers()
.stream()
.filter(user -> user.getUserId() == userId)
.findFirst()
.orElse(new User(-1, "Error")
.getEntries();
}
答案 1 :(得分:3)
答案已经在这里,但让我添加一件事-在这种情况下,请记住使用orElseGet
而不是orElse
。它不会急于创建User
:
.orElseGet(() -> new User(-1, "Error")
答案 2 :(得分:2)
由于整个Stream方法链返回单个User u
,然后调用return u.getEntries();
,因此可以将第二行附加到Stream的末尾并按原样返回:
return DataBaseConnector.getAllUsers().stream()
.filter(user -> user.getUserId() == userId)
.findFirst()
.orElse(new User(-1, "Error"))
.getEntries();