编程语言
首页 > 编程语言> > android-如何使用RxJava将双精度值的嵌套列表转换为Java类?

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

作者:互联网

在我的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 one rror(Throwable e) {}

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

}

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

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.最后,只需构建一个包含所有发射项目的列表.

(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,observable,rx-java,rx-android,retrofit
来源: https://codeday.me/bug/20191013/1904639.html