- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要对此有一个明确的解释,即使我读过这个 link关于差异但没有明确说明。那么任何人都可以用代码简单地向我解释一下吗?
最佳答案
我想我开始理解你的问题了。 Optional
的执行顺序可能与我们在过程编程中习惯的顺序不同(Java 流和其他使用 lambda 的代码也是如此)。
我将使用 Eugene’s answer 中的两个示例:
o1.orElse(new MyObject()); // 1055e4af
这是普通的旧 Java:它是对 orElse()
的调用,以 new MyObject()
作为参数。因此首先评估参数并创建一个新的 MyObject
。然后将其传递给 orElse()
。 orElse()
查看 Optional
中是否存在一个值;如果是,则返回该值(丢弃新创建的对象);如果不是,它返回在参数中给它的对象。这是一个更简单的例子。
o1.orElseGet(() -> {
System.out.println("Should I see this");
return new MyObject();
});
同样,我们有一个带有一个参数的方法调用,并且同样首先评估参数。 lambda 仅作为供应商创建和传递。 { }
中的代码尚未执行(您在 Eugene 的输出中也看不到 Should I see this
)。 orElseGet
再次查看 Optional
中是否存在值。如果存在,则返回值并忽略我们传递的供应商。如果没有,则调用供应商,执行 { }
中的代码以获取要从 orElseGet()
返回的值。
在第一种情况下,可能会说 MyObject
被创建并被浪费了。在第二个中,一个 Supplier
被创建并废弃了。在这两种情况下,您得到的返回都是简洁且空指针安全的代码。所以很多时候,你选择哪一个并不重要。如果创建 MyObject
成本高昂或有不良副作用,您当然会想要第二个版本,其中对象仅在需要时才创建,绝不会浪费。 Eugene 在评论中提到了返回对象来自数据库调用的情况。数据库调用通常非常耗时,您不想无缘无故地进行调用。
关于java - 当我需要使用 Optional.orElseGet() 而不是 Optional.orElse(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44261253/
我经常使用 var options = options || {} 作为默认为空对象的方式。它通常用于初始化选项对象,以防它未在函数调用的参数中传递。 问题是我在几个地方(博客文章、源代码)读到opt
我是Python中Rust的新手。这是我学习Rust的第四天。 在第一个问题Type casting for Option type之后,我有一个跟语法match和所有权概念有关的后续问题。 首先,我
我正在学习 Ray Wenderlich。我遇到了闭包语法错误。我想知道 Xcode 提示是什么意思? Xcode 报告如下: /Users/.../FlickrPhotosViewControlle
使用 Python 编写命令行界面 (CLI) 时 click library , 是否可以定义例如三个选项,其中仅当第一个(可选)未设置时才需要第二个和第三个选项? 我的用例是一个登录系统,它允许我
我有一个这样的 JPA 查询。 PersonRepository.java public Optional> findByStatus(int status); 人员服务.java System.ou
我遇到了很多地方,我有类似的东西 def f(s: String): Option[Long] = ... def g(l: Long): IO[Option[Wibble]] = ... val a
我有一个results: List[Future[Option[T]]]其中包含(并行)计算。 我想获得第一个非None尽快出结果,或者返回None如果所有计算都返回 None . 目前,我正在这样做
我正在尝试加载一个简单的 Listbox组件来自 @headlessui/react . 选择.tsx type Option = { id: number name: string
如何将Future[Option[Future[Option[X]]]]转换为Future[Option[X]]? 如果它是 TraversableOnce 而不是 Option 我会使用 Futur
Haskell、Rust 等语言提供了一个 Maybe 或 Option 类型。即使在 Java 中,也有一个 Optional 现在打字。 为简单起见,我将在剩下的问题中将此类型称为“选项类型”。
当我尝试在 SQL 中存储一个 XML 而不是一个空元素时,SQL 只是更改它并仅使用一个元素标签来存储它。例如,要存储的 XML 是: ROGER 然后Sql存起来就好了
使用这个非常好的命令行解析器 Argo(仅 header C++ 库)我遇到了一个小问题。请参阅:https://github.com/phforest/Argo Argo 返回:'Error: Un
我是来自 Java 背景的 Scala 新手,目前对考虑 Option[T] 的最佳实践感到困惑. 我觉得用 Option.map只是更实用和美观,但这不是说服其他人的好理由。有时, isEmpty
这个问题在这里已经有了答案: Chaining Optionals in Java 8 (9 个回答) Optional orElse Optional in Java (6 个回答) Functio
Optional::stream如果存在,则返回一个包含该值的 Stream,否则返回一个空流。所以对于 Stream> optionals , optionals.flatMap(Optional:
我使用箭头键作为输入,在 printf 菜单中上下移动 printf 箭头(“==>”)。 我正在使用一个函数来计算箭头应该在的位置,并使用 switch case 和 printf("\n==>")
这个问题在这里已经有了答案: What does the construct x = x || y mean? (12 个答案) 关闭 9 年前。 如我的问题标题所述,我最近偶然发现了这个变量声明:
这个问题在这里已经有了答案: BackboneJS: What is options || (options = {}); in Backbone source code (1 个回答) 关闭 8
我有这个简单的语法: word = Word(alphanums + '_') with_stmt = Suppress('with') + OneOrMore(Group(word('key') +
使用 Cucumber 和 SitePrism 编写测试,我在页面上有以下 HTML... Select a Status Active Product Inactive Prod
我是一名优秀的程序员,十分优秀!