假设我有这样的模型类。 I copy from here.
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) }
答案 0 :(得分:0)
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()...
答案 1 :(得分:0)
我想我得到了它,我认为答案对我来说。我想我必须首先使用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