[英]How to get Flowable<List<Foo>> from 'Bar' Object with One-to-many relations 'Foo' using realm and Rxjava
假设我有这样的模型类。 我从这里复制。
open class Person(
@PrimaryKey var id: Long = 0,
var name: String = "",
var age: Int = 0,
var dog: Dog? = null,
var cats: RealmList<Cat> = RealmList(),
) : RealmObject() {
}
人很多,每个人都有一只或多只猫。
我的问题是如何获得Flowable<List<Cat>>
或类似的东西(人们拥有的每只猫)。 从这个可流动的列表中,我想列出每只猫(按名称排序)并使用RecyclerView.Adapter进行显示。 请帮助我如何实现猫名单。 谢谢。
到目前为止,我只能通过以下方式获得Flowable<Cat>
。
mRealm.where(Person::class.java)
.findAllAsync().asFlowable()
.filter { p -> p.isLoaded }
.flatMap { p -> Flowable.fromIterable(p).flatMap { b -> Flowable.fromIterable(b.cats) }
open class Cat : RealmObject() {
var name: String? = null
@LinkingObjects("cats")
val owners : RealmResults<Person>? = null;
}
RealmResults<Cat> ownedCats = realm.where(Cat::class.java)
.isNotEmpty("owners")
.findAllAsync()...
我想我明白了,对我来说,答案就对了。 我想我必须先使用map,然后再使用flatMap将其展平为列表,然后将它们收集起来并进行排序。 这是一个带有调试输出的简单程序,以显示如何获取Flowable<List<Cat>>
。
mRealm.executeTransaction {
val person = mRealm.createObject(Person::class.java, 1)
person.name = "John"
val firstCat = mRealm.createObject(Cat::class.java)
firstCat.name = "Kitty"
person.cats.add(firstCat)
val secondCat = mRealm.createObject(Cat::class.java)
secondCat.name = "Ashes"
person.cats.add(secondCat)
}
mRealm.executeTransaction {
val person = mRealm.createObject(Person::class.java, 2)
person.name = "Bob"
val firstCat = mRealm.createObject(Cat::class.java)
firstCat.name = "Daisy"
person.cats.add(firstCat)
val secondCat = mRealm.createObject(Cat::class.java)
secondCat.name = "Missy"
person.cats.add(secondCat)
}
val flowableListOfCat: Flowable<List<Cat>> = mRealm.where(Person::class.java)
.findAllAsync().asFlowable()
.filter { person -> person.isLoaded }
.map { p -> p.flatMap { a -> a.cats }.sortedBy { c -> c.name } }
flowableListOfCat
.observeOn(AndroidSchedulers.mainThread())
.subscribe { catList -> catList.forEach { cat -> Log.d("Cat", "" + cat.name) } }
在调试输出中, D/Cat: Ashes D/Cat: Daisy D/Cat: Kitty D/Cat: Missy
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.