我使用带有findFirst()的Stream返回可选项,但是我的流可能没有发出任何内容,所以我在底部使用orElse运算符。
问题是orElse不返回可选的但是可选的findFirst运算符包装的类类型。
def optional = categories.categories.stream()
.filter { category -> category.name == selCategory }
.map { category -> loadUniqueIds.call(category) }
.map { UUIDs -> new JsonArray(UUIDs) }
.findFirst().orElse{Optional.of(new JsonArray())}
optional.get()
所以我最终没有使用findFirst和orElse的可能性。
我在这里做错了什么?
由于
更新:
我最终在findFirst之后删除了orElse并稍后检查了可选的
optional.isPresent() ? optional.get(): new JsonArray()
无论如何,如果某人有更好/更优雅的解决方案,请告诉我。
问候。
答案 0 :(得分:4)
如果您使用findFirst()
,则会获得Optional
,但如果您使用orElse()
(这是Optional
的方法),您将获得未包装的对象,因为没有你可以获得Optional
的方式。您可以获得findFirst()
解包或中的内容,即可获得orElse()
的“默认”值。
从orElse()
返回一个可选项是没有意义的,因为它始终保证存在。
Optional.of("foo").orElse("bar"); // Returns String "foo"
Optional.empty().orElse("bar"); // Returns String "bar"