RxJava - 任何组合扫描和flatMap的方法?

时间:2017-07-20 07:37:16

标签: java rx-java rx-java2

假设我有一个函数需要<?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魔法?

1 个答案:

答案 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);