我有一个“用户”实体的列表,我可以使用以下命令插入所有用户:
Completable.fromAction(() -> userDao.insert(users))
.subscribeOn(Schedulers.io());
这很好。
但是,每个用户实体都有一个“地址”实体列表,例如:List。
在存储库中,我有一个AddressDao,我想链接另一个可完成的对象,以便将所有地址与用户一起插入。
它看起来应该像这样:
Completable.fromAction(() -> userDao.insert(users))
.andThen(Completable.fromAction(() -> addressDao.insert(foreach(user).address))
.subscribeOn(Schedulers.io());
但是这不能编译,因为我不知道语法,而且我不确定是否应该使用andThen。有人可以帮我吗?
答案 0 :(得分:0)
要从用户列表中提取地址列表,可以使用Java 8流。
List<Address> addresses = users.stream()
.flatMap(user -> user.address.stream())
.collect(Collectors.toList())
完整答案:
Completable.fromAction(() -> userDao.insert(users))
.andThen(Completable.fromAction(() -> {
addressDao.insert(users.stream()
.flatMap(user -> user.address.stream())
.collect(Collectors.toList()))
})
.subscribeOn(Schedulers.io());
Stream仅在这里供您简化代码。如果Stream不可用,则只需简单的迭代就可以了。
final List<Address> addresses = new ArrayList<>();
for (User user: users) {
for (Address address: user) {
addresses.add(address);
}
}
完整答案:
final List<Address> addresses = new ArrayList<>();
for (User user: users) {
for (Address address: user) {
addresses.add(address);
}
}
Completable.fromAction(() -> userDao.insert(users))
.andThen(Completable.fromAction(() -> addressDao.insert(addresses))
.subscribeOn(Schedulers.io());