我是RxJava的新手,我有一个目前使用Spring Async的项目,尝试将其重构为RxJava方式,不知道什么是优雅的方式。
我们有一个UserService类,可以完成繁重的工作
@Async
public class UserService {
public Future<User> fetchUsers(String space, String username) {
// some other thing
...
// call network APIs to fetch users for a space
return new AsyncResult<>(clientOf.fetechUsers(space, username));
}
}
然后在来电者中:
List<Future<User>> users = new ArrayList<>();
String username = "alice";
for(String space : Arrays.asList("SPACE1", "SPACE2")) {
users.add(userService.fetchUsers(space, username));
}
List<User> resultUsers = new ArrayList<>();
for(Future<User> user: users) {
resultUsers.add(user.get());
}
return resultUsers;
在调用者中,我们想要并行调用两个空格的userService,然后合并结果,我应该如何使用RxJava完成它?我看到了Tread的一些例子,我是否必须自己管理Tread?还是有一种优雅的方式来完成工作?
答案 0 :(得分:0)
阅读更多我发现RxJava 2我意识到我可以做以下事情:
Observable.just("SPACE1", "SPACE2")
.observeOn(Schedulers.io())
.map(space -> userService.fetchUsers(space, username))
.blockingSubscribe(System.out::println);