FindFirst和orElse运算符返回不同的类类型

时间:2016-11-07 12:59:00

标签: groovy java-8 java-stream

我使用带有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()

无论如何,如果某人有更好/更优雅的解决方案,请告诉我。

问候。

1 个答案:

答案 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"