我不能在rxjava中使用takeUntil,因为我收到这个错误:
takeUntil(Predicate<? super T>) is ambiguous for the type (Flowable<T>)
public class Step {
private Integer actualStep;
private Integer nextStep;
//getters and setters
}
public Interface<T> BusinessStep {
Single<T> execute(T data);
}
public ComposedStep<T extends Step> implements BusinessStep<T> {
private Map<Integer,BusinessStep<T>> steps = new HashMap<>();
public void addStep(final Integer priority,
final BusinessStep<T> businessStepValidator) {
if (Objects.isNull(priority) || Objects.isNull(businessStepValidator)) {
return;
}
validations.put(priority, businessStepValidator);
}
@override
public Single<T> stepValidator(final T data) {
return Single.just(data)
.flatMap(x -> {
Optional<WrapperBusinessStepValidator<T>> oBusinessStep =
Optional.ofNullable(validations
.get(x.getNextStep()));
if(oBusinessStep.isPresent()) {
return oBusinessStep.get().stepValidator(x);
} else {
return Single.just(x);
}
})
.repeat()
.takeUntil(x -> x.getNextStep().equals(Integer.zero))
.lastElement()
.toSingle()
;
}
}
在steps
中有一个映射,与BusinessStep的实现一起接收Step的子节点并更改nextStep
。我需要创建一个循环,以便在nextStep
不同于条件时执行几个BusinessStep。
问题是代码无法编译,因为我在文本的第一部分提到的错误。
编译器不知道你是否需要takeUntil(Predicate<? super T>)
或takeUntil(Publisher<U>)
,因为从技术上讲,lambda函数与两者都匹配。直接显式强制转换告诉编译器你想要哪个:
.takeUntil((Predicate<? super T>) x -> x.getNextStep().equals(Integer.zero))
即使这样也会消除歧义(尽管我不是100%确定为什么,因为equals
已经返回了boolean
):
.takeUntil(x -> (boolean) x.getNextStep().equals(Integer.zero))