假设我有一个函数需要<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:="match_parent"
app:layout_behavilayout_widthor="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/temp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:text="Name" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/temp" />
</RelativeLayout>
和String
并返回long
。
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)
});
,但我希望使用返回String
的方法。对我来说,似乎我需要能够结合Single<String>
和scan
行为的东西。是否有任何可以帮助我的RxJava2魔法?
答案 0 :(得分:4)
您可以按如下方式实现。如果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);