Rx java 从Rx获取最新数据可能是在Rx可观察到的变化时

Rx java 从Rx获取最新数据可能是在Rx可观察到的变化时,rx-java,Rx Java,我有一个用例,我想将可观察的中的数据与可能中的最新值组合起来。带有的API可能是一个我无法控制的外部API。实际上,我想做的是当可观察的发生变化时,从可能中懒洋洋地获取值,并使用函数将它们组合起来 为了简单起见,我们假设M是Integer,N是String。我试着写了以下内容: public interface SomeExternalApi { Maybe<String> getLatestString(); } public interface SomeInternalAp

我有一个用例,我想将
可观察的
中的数据与
可能
中的最新值组合起来。带有
的API可能是一个我无法控制的外部API。实际上,我想做的是当
可观察的
发生变化时,从
可能
中懒洋洋地获取值,并使用函数将它们组合起来

为了简单起见,我们假设
M
Integer
N
String
。我试着写了以下内容:

public interface SomeExternalApi {
  Maybe<String> getLatestString();
}

public interface SomeInternalApi {
  Observable<Integer> getIntegerObservable();
}

public class MyClass {

  private final SomeExternalApi externalApi;
  private final SomeInternalApi internalApi;

  public Disposable subscribe(Consumer<? super IntegerAndString> observer) {
    return internalApi
        .getIntegerObservable()
        .withLatestFrom(
            externalApi.getLatestString().toObservable(),
            integerData, stringData -> new IntegerAndString(integerData, stringData)
        .subscribe(observer); 
  }

  private static class IntegerAndString {
    // data class that holds onto both
  } 
}
公共接口SomeExternalApi{
可能是getLatestString();
}
公共接口API{
可观测的getIntegerObservable();
}
公共类MyClass{
私有最终SomeExternalApi externalApi;
私有最终SomeInternalApi;
根据定义,公共一次性订阅(消费者
可能
最多发射一个元素

我认为您基本上希望反复调用
externalApi.getLatestString()
。我还没有对此进行测试,但您可以尝试在此处使用
Observable.defer(…)

      public Disposable subscribe(Consumer<? super IntegerAndString> observer) {
        return internalApi
            .getIntegerObservable()
            .withLatestFrom( Observable.defer(
                () -> externalApi.getLatestString().toObservable() ),
                integerData, stringData -> new IntegerAndString(integerData, stringData)
            .subscribe(observer));
      }

公共一次性订阅(消费者银行,这就是解决方案!