当前位置: 首页 > 知识库问答 >
问题:

Optional.ifPresent()的正确用法

爱亮
2023-03-14
Optional<User> user=...
user.ifPresent(doSomethingWithUser(user.get()));
ifPresent(java.util.functionError:(186, 74) java: 'void' type not allowed here)
if(user.isPresent())
{
  doSomethingWithUser(user.get());
}
 user.ifPresent(new Consumer<User>() {
            @Override public void accept(User user) {
                doSomethingWithUser(user.get());
            }
        });

有什么想法吗?

共有1个答案

邓正谊
2023-03-14

可选的 .ifpresent() 采用使用者<?super user>作为参数。您将向它传递一个类型为void的表达式。这样就不能编译了。

使用者打算作为lambda表达式实现:

Optional<User> user = ...
user.ifPresent(theUser -> doSomethingWithUser(theUser));

或者更简单,使用方法引用:

Optional<User> user = ...
user.ifPresent(this::doSomethingWithUser);
Optional<User> user = ...
user.ifPresent(new Consumer<User>() {
    @Override
    public void accept(User theUser) {
        doSomethingWithUser(theUser);
    }
});
 类似资料:
  • 问题内容: 我试图了解Java 8中API 的方法。 我有简单的逻辑: 但这会导致编译错误: 我当然可以做这样的事情: 但这就像混乱的支票一样。 如果我将代码更改为此: 代码变得越来越脏,这让我想到了回到旧支票。 有任何想法吗? 问题答案: 需要作为参数。您正在向其传递类型为void的表达式。因此,它不会编译。 使用者应被实现为lambda表达式: 甚至更简单,使用方法参考: 这基本上与 想法是仅

  • 问题内容: 我刚刚开始使用BoneCP,并从作者站点中提取了示例JDBC代码。 我有一个名为getConnection()的函数,该函数返回一个片段: 现在,我的问题是:1)使用完上述函数返回的连接后,是否将其返回到池中,还是完全关闭连接,我该调用connection.close()吗?如何将连接返回池? 2)如何在应用程序退出时清理池?我结束时会调用connectionPool.shutdown

  • 问题内容: 这个想法是使用更少的连接和更好的性能。连接是否随时终止? 对于另一个问题,是否打开新连接? 问题答案: 不,多路复用器不会过期。没有GetDatabase不会打开新连接。basics.md涵盖了所有内容 -特别是: 从GetDatabase返回的对象是便宜的直通对象,不需要存储。

  • 我有一个使用jquery mobile的应用程序,它由几个html页面组成,每个页面中都有几个jquery页面元素。在桌面浏览器上,一切正常,但当我把它加载到我的android设备(运行2.3)上时,第一个页面看起来很好,但只要你点击一个链接(比如从index.html)- 那么,是否有正确的方法在不同的html页面之间移动呢?我没有得到任何浏览器错误,所以一切似乎都工作正常,但没有jqm的样式或

  • 问题内容: 我正在尝试对表单中的某些字段使用get_or_create,但尝试这样做时却出现500错误。 其中一行如下所示: 对于以上代码,我得到的错误是: 问题答案: 从文档get_or_create中: 说明: 要评估相似性的字段必须在外部提及。其余字段必须包含在中。如果发生CREATE事件,则会考虑所有字段。 看起来你需要返回一个元组,而不是单个变量,请执行以下操作:

  • 经常能看到网页中存在 <a href="javascript:void(0)">some link</a> 这样的写法却不明白什么意思,其实 StackOverflow 上已经有一个不错的解释了。 要了解这段代码的意思,首先需要知道 JavaScript 中 void 有什么用处。void 是一个很早就存在于 JS 中的操作符(而不是函数),通常的用法是 void(0)(相当于 void 0),返