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

问题描述 投票:1回答:2

我有一个嵌入了特征模型的用户模型

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

使用FlowablerxJava我想将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对象的列表,而不是用户。

java mongodb java-8 rx-java2 micronaut
2个回答
2
投票

如果要获取所有用户的所有特征的列表,可以像这样实现:

Single<List<User>> users = ...;
Single<List<Characteristics>> characteristics = users
    .flatMapObservable(Observable::fromIterable)
    .flatMapIterable(user -> user.characteristics)
    .toList();

0
投票

您可以使用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);
}
© www.soinside.com 2019 - 2024. All rights reserved.