Java Stream API如何提高表达

时间:2018-08-14 09:01:18

标签: java list java-8 java-stream

我有以下代码:

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)

3 个答案:

答案 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();