2015-12-28 3 views
1

Используя следующие объекты:Фильтр Подсписок использования RxJava

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

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

Цель состоит в том, чтобы сохранить несвободные элементы, начиная с наблюдаемом < 0rder> и до сих пор возвращает Observable < 0rder>.

Я делаю следующее сейчас, но мои вещи не фильтруются:

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

ответ

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; 
    } 
} 
Смежные вопросы