首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确使用Optional.ifPresent()

正确使用Optional.ifPresent()
EN

Stack Overflow用户
提问于 2014-06-15 09:33:29
回答 5查看 330.9K关注 0票数 136

我试图理解Java8中的ifPresent() API的Optional方法。

我有一个简单的逻辑:

代码语言:javascript
运行
复制
Optional<User> user=...
user.ifPresent(doSomethingWithUser(user.get()));

但这会导致编译错误:

代码语言:javascript
运行
复制
ifPresent(java.util.functionError:(186, 74) java: 'void' type not allowed here)

我当然可以做这样的事:

代码语言:javascript
运行
复制
if(user.isPresent())
{
  doSomethingWithUser(user.get());
}

但这就像一张杂乱的null支票。

如果我将代码更改为:

代码语言:javascript
运行
复制
 user.ifPresent(new Consumer<User>() {
            @Override public void accept(User user) {
                doSomethingWithUser(user.get());
            }
        });

代码变得越来越脏,这让我想到回到旧的null检查。

有什么想法吗?

EN

Stack Overflow用户

发布于 2017-04-26 07:34:40

除了@JBNizet的答案之外,我对ifPresent的一般用例是将.isPresent().get()结合起来

旧方式:

代码语言:javascript
运行
复制
Optional opt = getIntOptional();
if(opt.isPresent()) {
    Integer value = opt.get();
    // do something with value
}

新途径:

代码语言:javascript
运行
复制
Optional opt = getIntOptional();
opt.ifPresent(value -> {
    // do something with value
})

对我来说,这更直观。

票数 40
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24228279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档