Java 如何将可选项与ifPresent一起使用

Java 如何将可选项与ifPresent一起使用,java,java-8,optional,Java,Java 8,Optional,我知道有多个问题与这个问题非常相似,但我找不到我希望得到的答案 我的用例在这里非常简单。我有一个可选对象,如果可选对象中的对象存在,我想从Optiona对象返回一个值。例如,我想做如下事情: private String getUserName(String id) { // this doesn't work return fetchUser(id).ifPresent(user -> user.getName()).orElse("DEFAULT

我知道有多个问题与这个问题非常相似,但我找不到我希望得到的答案

我的用例在这里非常简单。我有一个可选对象,如果可选对象中的对象存在,我想从Optiona对象返回一个值。例如,我想做如下事情:

private String getUserName(String id) {
       // this doesn't work
        return fetchUser(id).ifPresent(user -> user.getName()).orElse("DEFAULT_NAME");
    }

    private Optional<User> fetchUser(String id) {
        try {
            return Optional.ofNullable(searchUser(id));
        } catch (Exception e) {
            LOGGER.error("User not found with id {}", id);
            return Optional.empty();
        }
    }
我只是想找到一种方法来避免写
,否则使用:


您的问题是“如何使用
ifPresent
”,但您的问题实际上是通过使用
map
而不是
ifPresent
来解决的,因为您希望返回一个值。因此,这是一个-如果您搜索问题()而不是尝试的解决方案(
isPresent
),您可能已经找到了解决问题的现有答案。请使用
map
orElse
查看此问题的第二个答案。谢谢,这真的很有帮助。这正是我要找的for@RDM很乐意帮忙。
private String getUserName(String id) {
//      return fetchUser(id).ifPresent(user -> user.getName()).orElse("DEFAULT_NAME");
        Optional<User> user = fetchUser(id);
        if(user.isPresent()) {
            return user.get().getName();
        } else {
            return "DEFAULT_NAME";
        }
    }
return fetchUser(id).map(User::getName).orElse("DEFAULT_NAME");