使用 RxJava 过滤子列表 [英] Filter sublist using RxJava

查看:40
本文介绍了使用 RxJava 过滤子列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用以下对象:

Order {
 int orderId;
 List<Item> items; 
}

Item {
 int price;
 String description;
 boolean free; 
}

目标是保留从 Observable<0rder> 开始的非自由项,并仍然返回 Observable<0rder>.

The goal is to keep non-free items starting from an Observable<0rder> and still return an Observable<0rder>.

我现在正在执行以下操作,但我的项目没有被过滤:

I'm doing the following for now, but my items doesn't get filtered :

    getMyOrder() // returns Observable<Order> from the network
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.computation())
    .flatMap(
       order -> Observable.from(order.items)
                        .filter(item -> !item.isFree())
                        .map(items -> order)
       );

推荐答案

这感觉不像是应该使用 RxJava 来完成的事情(特别是如果你想在过滤步骤之后发出 Order ), 可以是 Order 中的一个实例方法,例如:

This doesn't feel like something that should be done using RxJava (especially if you want to emit Order after the filtering step), could be an instance method in Order, for example:

getMyOrder().subscribeOn(Schedulers.io())
        .observeOn(Schedulers.computation())
        .map(Order::removeFreeItems)
        .subscribe();

class Order {
    int orderId;
    List<Item> items;

    public Order removeFreeItems() {
        for (Iterator<Item> iterator = items.iterator(); iterator.hasNext(); ) {
            if (iterator.next().free) {
                iterator.remove();
            }
        }
        return this;
    }
}

这篇关于使用 RxJava 过滤子列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆