2016-04-23 35 views
1

我是RxJava的新手,尝试使用Realm Observable功能。Realm asObservable()只发射新项目

做这件事时

realm.where(Intake.class) 
      .findAllSorted("time", Sort.DESCENDING) 
      .asObservable() 

我得到物品的完整列表,但是当soemthing变化(即产品加入),我又得到了完整列表。

什么是RxJava的方式来获得新的项目?

在此先感谢

回答

0

您正在访问的查询结果。由于您的查询可以包含多个项目(findAllSorted()),因此您始终会观察RealmResults,当发生更改时会发出所有已排序的项目(请参阅docs)。

你可以做这样的事情:

realm.where(Intake.class) 
    .findAllSorted("time", Sort.DESCENDING) 
    .asObservable() 
    .flatMapIterable(results -> results) 
    .distinct(); 

这确实2个更多的东西:

  • 将您RealmResults奇异Intake实例
  • 只有让不同的项目通过(请确保您的Intake正确地执行equals()

但是,这会增加一些额外的CPU负载,因为每次查询通过新的RealmResult时,都会执行处理以过滤出不同的项目。

在上面的例子中,排序将在发射的Intake对象的初始集合上工作。然而,任何后续排放的物品都可能被无序地观察到,因为它们是新的并在初始结果之后排放。

+0

以及如何处理删除的项目? – Cheborra

+0

我并不熟悉Realm,但我的猜测是调用Intake Observable上的filter()来过滤掉已删除的。 –