2017-04-05 27 views
0

我是RxJava的新手,我有一个当前使用Spring异步的项目,试图将它重构为RxJava的方式,不知道什么是优雅的方式。重构Spring异步到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

阅读更我发现与RxJava 2,我意识到,我可以做这样的事情:

Observable.just("SPACE1", "SPACE2") 
      .observeOn(Schedulers.io()) 
      .map(space -> userService.fetchUsers(space, username)) 
      .blockingSubscribe(System.out::println);