在RXjava中转换类型

时间:2017-09-06 05:55:48

标签: android rx-android rx-java2

是否可以将像Single这样的observable转换为Single?我相信运算符compose()用于此目的,但我在如何实现它时迷失了

在下面的代码片段中可以更清楚地看到我想要实现的目标。

@Override
public Single<SystemDefaults> getSystemDefaults() {

    SystemDefaults systemDefaults = new SystemDefaults();
    return systemDao.getRoles().compose((SingleTransformer<List<Role>, SystemDefaults>) upstream -> {
        //WHAT SHOULD I DO HERE?
    });

}

我是RxJava(Android)的新手,所以我在这里很丢失。

2 个答案:

答案 0 :(得分:1)

是的,操作员正在查看它的构成,并且它用于从先前的可观察/单个变换可观察/单个。

这是一个如何将Integer observable转换为String observable的示例。

   Observable.Transformer<Integer, String> transformIntegerToString() {
        return observable -> observable.map(String::valueOf);
    }

    /**
     * In this example we use a transformer to get the Integer item emitted and transform to String
     */
    @Test
    public void observableWithTransformToString() {
        Observable.just(1)
                  .map(number -> {
                      System.out.println("Item is Integer:" + Integer.class.isInstance(number));
                      return number;
                  })
                  .compose(transformIntegerToString())
                  .subscribe(number -> System.out.println("Item is String:" + (String.class.isInstance(number))));

    }

您可以在此处看到另一个示例,如何将其更改为另一个线程中的另一个observable。 https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/transforming/ObservableCompose.java

答案 1 :(得分:1)

您需要map运算符。 Map会将Observable s(或Single s Maybe s)中的每个项目移除,并将其转换为其他值:

Observable.just(1)                                      // Start emitting Integers
              .map(number -> number.toString()})        // Transform it to String
              .subscribe(someString -> System.out.println(someString.getClass()));     // Receive an String