Groovy FindFirst和orElse运算符返回不同的类类型
我将流与Groovy FindFirst和orElse运算符返回不同的类类型,groovy,java-8,java-stream,Groovy,Java 8,Java Stream,我将流与findFirst()一起使用,它返回可选,但也有可能我的流可能不会发出任何东西,因此我在底部添加了orElse操作符 问题是,orElse不返回可选的类类型,而是可选的findFirst运算符包装的类类型 def optional = categories.categories.stream() .filter { category -> category.name == selCategory }
findFirst()
一起使用,它返回可选
,但也有可能我的流
可能不会发出任何东西,因此我在底部添加了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()
无论如何,如果有人有更好/优雅的解决方案,请告诉我
关于。如果您使用findFirst()
您会得到一个可选的,但是如果您使用orElse()
(这是可选的方法),您会得到一个未包装的对象,因为您再也无法得到可选的。您可以从findFirst()
unwrapped中获取找到的内容,或者从orElse()
中获取“默认”值
从orElse()
返回一个可选项是没有意义的,因为它总是保证存在的
Optional.of("foo").orElse("bar"); // Returns String "foo"
Optional.empty().orElse("bar"); // Returns String "bar"
如果使用findFirst()
您将获得一个可选的,但是如果使用orElse()
(这是可选的方法),您将获得未包装的对象,因为您无法再获得可选的。您可以从findFirst()
unwrapped中获取找到的内容,或者从orElse()
中获取“默认”值
从orElse()
返回一个可选项是没有意义的,因为它总是保证存在的
Optional.of("foo").orElse("bar"); // Returns String "foo"
Optional.empty().orElse("bar"); // Returns String "bar"
Java中的def optional
应该是什么?这是groovy,但我使用的是Java 8 stream什么def optional
应该是Java中的?这是groovy,但我使用的是Java 8 stream谢谢,这是我认为最好使用的orElseGet{->new JsonArray()}
,在这种情况下,所以你不会在每次调用它时都创建一个新的,不管是什么hanks,这就是我认为最好使用orElseGet{->new JsonArray()}
在这种情况下,所以你不会在每次调用它时都创建一个新的,不管发生什么