使用RxJava过滤子列表

时间:2015-12-28 09:48:25

标签: android rx-java

使用以下对象:

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

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

目标是从Observable&lt; 0rder&gt;开始保持非免费物品。并仍然返回一个Observable&lt; 0rder&gt;。

我现在正在做以下事情,但我的项目没有被过滤:

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

1 个答案:

答案 0 :(得分:0)

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

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;
    }
}
相关问题