我有一个嵌入Caracteristic模型的用户模型
public class User {
private List<Caracteristic> cracteristics;
}
使用Flowable
和rxJava
我想获取所有用户的所有 Caracteristics 的列表,即将Single<List<User>>
转换为Single<List<Caracteristics>>
@Controller("cars")
public class CaracteristicController() {
public Single<List<User> list() {
return Flowable.fromPublisher(
getCollection().find(exists("caracteristics")))
.toList();
}
private MongoCollection<User> getCollection() {
return dbClient
.getDatabase(dbConfiguration.getDatabaseName())
.getCollection(dbConfiguration.getCollectionName(), User.class);
}
}
用户模型是MongoDB数据库中的文档
{
"name" : "name",
"caracteristics" : [
{
"desc" : "carac 1",
"ref" : "ROO12"
},
{
"desc" : "carac 2",
"ref" : "ROO14"
}]
}
我不知道如何操作Flowable
或Single
以返回Caracteristic
对象列表而不是用户。
如果你想获得所有用户的所有特征的列表,你可以像这样实现它:
Single<List<User>> users = ...;
Single<List<Characteristics>> characteristics = users
.flatMapObservable(Observable::fromIterable)
.flatMapIterable(user -> user.characteristics)
.toList();
您可以使用flatMapIterable
运算符将所有用户对象的特征列表合并到一个Single
中。
public Single<List<Characteristic>> list() {
return Flowable.fromPublisher(getCollection().find(exists("caracteristics")))
.flatMapIterable((user) -> user.characteristics)
.toList();
}
private MongoCollection<User> getCollection() {
return MongoClients.create()
.getDatabase("db")
.getCollection("collection", User.class);
}