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>
的方法。对我来说,我似乎需要一些可以结合 scan
和 flatMap
行为的东西。有什么 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);
假设我有一个函数接受一个 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>
的方法。对我来说,我似乎需要一些可以结合 scan
和 flatMap
行为的东西。有什么 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);