平面映射之间的Rxjava差异只是vs map return param

时间:2015-07-06 11:50:26

标签: android rx-java

这有什么区别:

public Observable<List<MessageDb>> getLastXMessages(int x, String userToGetMessagesFrom){
    return MainApplication.getInstance().getRiotXmppService().getRiotConnectionManager().getConnectedUser()
            .flatMap(connectedUser -> {
                QueryBuilder qb = 
        ... 
        ...         
                return Observable.just(qb.list());
            });
}

或者

public Observable<List<MessageDb>> getLastXMessages(int x, String userToGetMessagesFrom){
    return MainApplication.getInstance().getRiotXmppService().getRiotConnectionManager().getConnectedUser()
            .map(connectedUser -> {
                QueryBuilder qb = 
        ... 
        ...         
                return qb.list();
            });
}

是否有任何更好的解决方案或两者都可以正常工作。

2 个答案:

答案 0 :(得分:1)

FlatMap的行为与map非常相似,不同之处在于它本身返回一个observable,因此它非常适合映射异步操作。 Map不必发出与源Observable相同类型的项目。

在实际意义上,Map只对链式响应进行转换(不返回Observable);当FlatMap返回一个Observable时,如果你打算在方法中进行异步调用,那么这就是推荐FlatMap的原因,所以:

  • Map返回类型为T

  • 的对象
  • FlatMap返回一个Observable。

答案 1 :(得分:1)

当然两者都很好。如果您不打算异步执行某些操作,那么我更喜欢map,因为它比flatMap的开销更少。看起来你的例子(?)中涉及到网络调用,开销可能是微不足道的。

相关问题