在 RxJava 中将对象的单个转换为同一对象的内部字段的 Single



我有一个嵌入Caracteristic模型的用户模型

public class User {
private List<Caracteristic> cracteristics;
}

使用FlowablerxJava我想获取所有用户的所有 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"
}]
}

我不知道如何操作FlowableSingle以返回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);
}

相关内容

  • 没有找到相关文章

最新更新