将对象的 Single 转换为 RxJava 中同一对象的内部字段的 Single
Transform a Single of an object to a Single of an inner field of that same object in RxJava
我有一个嵌入了特征模型的用户模型
public class User {
private List<Caracteristic> cracteristics;
}
使用 Flowable
和 rxJava
我想获得所有用户的所有特征列表,即将 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
到 return Caracteristic
对象列表而不是用户列表。
您可以使用 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);
}
如果你想获得所有用户的所有特征列表,你可以这样实现:
Single<List<User>> users = ...;
Single<List<Characteristics>> characteristics = users
.flatMapObservable(Observable::fromIterable)
.flatMapIterable(user -> user.characteristics)
.toList();
我有一个嵌入了特征模型的用户模型
public class User {
private List<Caracteristic> cracteristics;
}
使用 Flowable
和 rxJava
我想获得所有用户的所有特征列表,即将 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
到 return Caracteristic
对象列表而不是用户列表。
您可以使用 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);
}
如果你想获得所有用户的所有特征列表,你可以这样实现:
Single<List<User>> users = ...;
Single<List<Characteristics>> characteristics = users
.flatMapObservable(Observable::fromIterable)
.flatMapIterable(user -> user.characteristics)
.toList();