2016-04-23 10 views
1

RxJavaを初めて使用し、Realm Observable機能を使用しようとしています。レルムasObservable()は新しいアイテムのみを出力します

私はアイテムの完全なリストを取得しますが、ときsoemthing変化(すなわち項目が追加された)この

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

をやったとき、私は再び完全なリストを取得します。

新しいアイテムだけを取得するRxJavaの方法は何ですか?

ありがとうございます。

答えて

0

あなたは現在、クエリの結果を観察しています。クエリには複数の項目(findAllSorted())が含まれている可能性がありますので、変更があった場合はすべてのソート項目を表示するRealmResultsを常に監視しています(docs参照)。

あなたはこのような何か行うことができます。

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

これは、2つのより多くの事を行います。

  • はあなたのRealmResultsは、あなたのことを確認します(個別の項目を通過させる単数Intakeインスタンス
  • に変換しますIntakeは正しくequals()を実装します)

しかし、クエリに新しいRealmResultが渡されるたびに、別個の項目を除外するための処理が行われるため、CPU負荷が増えます。

上記の例では、ソートは放出されたIntakeオブジェクトの初期セットで機能します。ただし、その後に放出されるアイテムは、新しいものであり、初期結果の後に放出されるため、順序が乱れることがあります。

+0

あなたは削除されたアイテムをどのように扱いますか? – Cheborra

+0

私はRealmに精通していませんが、私の推測では、Intake Observableのfilter()を呼び出して、削除されたフィルタをフィルタリングすることです。 –

関連する問題