有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java折叠以返回不同的值

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

Either<DomainError, Boolean> maybePendingPayment = ...

我想折叠此响应以返回<;域错误,可选>

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检查左右两侧之外,我还有什么办法可以用更奇特的方式来做这件事吗


共 (1) 个答案

  1. # 1 楼答案

    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>,并将fold的左函数包装为可选。当打开Either时,返回类型将是Optional<DomainError>或正确函数的结果(在我的示例中是StringOptional.empty)。如果您试图返回的函数有一个通用的超类型(介于GenericTypeDomainError),那么您可以选择此超类型作为函数的返回类型,而不是Object