Sie beobachten gerade die Abfrageergebnisse. Da Ihre Abfrage mehrere Elemente enthalten kann (findAllSorted()
), beobachten Sie immer die RealmResults
, die bei einer Änderung alle sortierten Elemente ausgibt (siehe docs).
Sie können so etwas tun:
realm.where(Intake.class)
.findAllSorted("time", Sort.DESCENDING)
.asObservable()
.flatMapIterable(results -> results)
.distinct();
Das macht 2 weitere Dinge:
- wandeln Sie Ihre
RealmResults
zu singulären Intake
Instanzen
- nur unterschiedliche Elemente (machen passieren sicher lassen Sie Ihre
Intake
implementiert equals()
korrekt)
Dies verursacht jedoch eine zusätzliche CPU-Belastung, da jedes Mal, wenn die Abfrage eine neue RealmResult
weiterleitet, die Verarbeitung durchgeführt wird, um die einzelnen Elemente herauszufiltern.
Im obigen Beispiel wird die Sortierung für den ersten Satz der ausgegebenen Intake
Objekte funktionieren. Spätere emittierte Objekte können jedoch außer Betrieb betrachtet werden, da sie neu sind und nach den ersten Ergebnissen emittiert werden.
und wie würden Sie mit gelöschten Elementen umgehen? – Cheborra
Ich bin nicht vertraut mit Realm, aber meine Vermutung ist, filter() auf der Aufnahme Observable, um gelöschte herauszufiltern. –