android - 如何使用 RxJava 将嵌套的 double 值列表转换为 Java 类?

标签 android retrofit rx-java observable rx-android

在我的 Android 客户端中,我从后端收到此 JSON 数据:

[
    [
        1427378400000,
        553
    ],
    [
        1427382000000,
        553
    ]
]

这是实际加载数据的例程。我正在使用 RxAndroidRetrofit在这里。

private void getProductLevels() {
    Observable<List<List<Double>>> responseObservable =
        mProductService.readProductLevels();
    AppObservable.bindFragment(this, responseObservable)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        // TODO: Transform List<List<Double>> into List<ProductLevel>
        .subscribe(new Subscriber<List<List<Double>>>() {
            @Override
            public void onCompleted() {}

            @Override
            public void onError(Throwable e) {}

            @Override
            public void onNext(List<List<Double>> response) {}
        });

}

如何映射内部 List<Double>到特定的 Java 类,例如 ProductLevel使用 RxJava 运算符

public class ProductLevel {

    public Double mTimeStamp;
    public Double mLevel;

    public ProductLevel(Double timeStamp, Double level) {
        mTimeStamp = timeStamp;
        mLevel = level;
    }

}

最后,我想收到这个:List<ProductLevel> .

最佳答案

根据您的数据,您会收到一对列表(时间戳、级别)。这对由仅包含 2 个值的列表表示。

因此,您想要发出每一对,并将每一对转换ProductLevel

为此,您必须 flatMap 您的配对列表以发出每一对。然后将每一对映射到一个ProductLevel。最后,只需构建一个包含所有已发出项目的 list

(java8风格)

AppObservable.bindFragment(this, responseObservable)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
             .flatMapIterable(listOfList -> listOfList) // or flatMap(l -> Observable.from(l))
             .map(pair -> new ProductLevel(pair.get(0),pair.get(1))) // build ProductLevel for each pair
             .toList() // build a list with all ProductLevel
             .subscribe(listOfProductLevel -> /** ... **/);

关于android - 如何使用 RxJava 将嵌套的 double 值列表转换为 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29948117/

相关文章:

android - Kotlin Retrofit 查询注释参数

android - "Retrofit"多个图像附加在一个多部分请求中

android - 如何从 Retrofit2 调用 OnResponse 返回 Java 对象

android - RxJava- 动态 EditText 上的 RxAndroid 表单验证

java - RxJava 允许多次 onError 调用

Spring Boot 2 - 从 RestControler 返回 rx.Observable

android - 我如何循环遍历 android 中的 HashTable 键?

android - 安装应用程序后 Titanium android 应用程序大小增加 - 如何修复?

java - (Android+Retrofit 2) - 将静态 header 与拦截器一起使用是否有缺点?

android - 在系统签名的应用程序中使用自定义 RenderScript