RxJava - 有什么方法可以结合 scan 和 flatMap 吗?

RxJava - Any way to combine scan and flatMap?

假设我有一个函数接受一个 String 和一个 long 和 return 一个 Single<String>.

Single<String> stringAddition(String someString, long value) {
  return Single.just(someString + Long.toString(value));
}

现在我有了这个 Observable...

Observable.interval(1, SECONDS)
  .scan("", (cumulativeString, item) -> {
    // Need to return the result of stringAddition(cummulativeString, item)
  });

我不知道该怎么做。 Scan需要我return一个String,但是我想用return一个Single<String>的方法。对我来说,我似乎需要一些可以结合 scanflatMap 行为的东西。有什么 RxJava2 魔法可以帮助我吗?

您可以通过以下方式实现。如果 stringAddition 会返回 Observable

,则可以稍微缩短
Observable<String> scanned = Observable.interval(1, TimeUnit.SECONDS)
            .scan(
                    Observable.just(""),
                    (cumulativeString, item) ->
                        cumulativeString
                          .flatMap(str -> stringAddition(str, item).toObservable())
            )
            .flatMap(it -> it);