微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

折叠以返回不同的值

如何解决折叠以返回不同的值

我有一个Vavr Either,看起来像这样:

Either<DomainError,Boolean> maybePendingPayment = ...

我想折叠此响应以返回Either

return maybePendingPayment.fold(domainError -> domainError,pendingPayment ? GenericType.builder().build() : Optional.empty())

但是我似乎无法做到这一点,因为fold希望我返回相同的类型:

[ERROR]     lower bounds: io.vavr.control.Either<xxx.yyy.DomainError,java.util.Optional<xxx.yyy.GenericType>>,java.lang.Object
[ERROR]     lower bounds: java.util.Optional<T>,java.util.Optional<T>,xxx.yyy.DomainError

除了用if-else检查左侧和右侧之外,还有什么方法可以更简便地实现此目的?

解决方法

fold应用到Either上(顾名思义)将其折叠并应用left或right函数,并返回所应用函数的结果。

在以下示例中,我试图更清楚地说明正在发生的事情:

    public Optional<Object> verify() {
        Either<DomainError,Boolean> maybePendingPayment = Either.right(true);
        return maybePendingPayment.fold(Optional::of,pendingPayment -> pendingPayment ? Optional.of("pending payment") : Optional.empty());
    }

如您所见,我为函数的返回类型选择了Optional<Object>并将折页的左侧函数也包装在Optional中。解开Either时,您的返回类型将是Optional<DomainError>或正确函数的结果(在我的示例中是StringOptional.empty)。如果要返回的值有一个公共的超类型(在GenericTypeDomainError之间),则可以选择此类型作为函数的返回类型,而不是Object。>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。