Rxjava flatMap 与 map return 参数之间的区别
Rxjava difference between flatMap just vs map return param
这有什么区别吗:
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();
});
}
是否有更好的解决方案,或者两者都可以。
FlatMap 的行为与 map 非常相似,不同之处在于它 returns 本身是一个可观察对象,因此它非常适合映射异步操作。 Map 不必发出与源 Observable 相同类型的项目。
在实际意义上,Map 只是对链式响应进行转换(不返回 Observable);而 FlatMap returns 是一个 Observable,这就是为什么如果你打算在方法内部进行异步调用,那么推荐使用 FlatMap,所以:
映射returns类型为T的对象
FlatMap returns 一个 Observable。
当然,两者都可以正常工作。如果您不打算异步执行操作,那么我更喜欢 map
,因为它的开销比 flatMap
少。看起来您的示例中涉及网络调用(?),开销可能微不足道。
这有什么区别吗:
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();
});
}
是否有更好的解决方案,或者两者都可以。
FlatMap 的行为与 map 非常相似,不同之处在于它 returns 本身是一个可观察对象,因此它非常适合映射异步操作。 Map 不必发出与源 Observable 相同类型的项目。
在实际意义上,Map 只是对链式响应进行转换(不返回 Observable);而 FlatMap returns 是一个 Observable,这就是为什么如果你打算在方法内部进行异步调用,那么推荐使用 FlatMap,所以:
映射returns类型为T的对象
FlatMap returns 一个 Observable。
当然,两者都可以正常工作。如果您不打算异步执行操作,那么我更喜欢 map
,因为它的开销比 flatMap
少。看起来您的示例中涉及网络调用(?),开销可能微不足道。