这有什么区别:
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();
});
}
是否有任何更好的解决方案或两者都可以正常工作。
答案 0 :(得分:1)
FlatMap的行为与map非常相似,不同之处在于它本身返回一个observable,因此它非常适合映射异步操作。 Map不必发出与源Observable相同类型的项目。
在实际意义上,Map只对链式响应进行转换(不返回Observable);当FlatMap返回一个Observable时,如果你打算在方法中进行异步调用,那么这就是推荐FlatMap的原因,所以:
Map返回类型为T
FlatMap返回一个Observable。
答案 1 :(得分:1)
当然两者都很好。如果您不打算异步执行某些操作,那么我更喜欢map
,因为它比flatMap
的开销更少。看起来你的例子(?)中涉及到网络调用,开销可能是微不足道的。