Rah*_*hra -1 java optional java-8
我知道 SO 上有多个问题与这个问题非常相似,但我找不到我希望得到的解决方案。
我的用例在这里非常简单。我有一个 Optional 对象,如果 Optional 中的对象存在,我想从 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();
}
}
Run Code Online (Sandbox Code Playgroud)
我当然试图避免if这里的块,我也知道它ifPresent需要 a Consumer,因此里面的任何东西ifPresent都不会返回任何值。但是有没有办法像上面那样以更优雅的方式实现这一点。解决这个问题的方法当然是重新编写如下代码:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
我只是想找到一种避免写作的方法 if-else
使用Optional#map:
return fetchUser(id).map(User::getName).orElse("DEFAULT_NAME");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |