Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android flatMap just与map return param之间的Rxjava差异_Android_Rx Java - Fatal编程技术网

Android flatMap just与map return param之间的Rxjava差异

Android flatMap just与map return param之间的Rxjava差异,android,rx-java,Android,Rx Java,这两者之间有什么区别吗: public Observable<List<MessageDb>> getLastXMessages(int x, String userToGetMessagesFrom){ return MainApplication.getInstance().getRiotXmppService().getRiotConnectionManager().getConnectedUser() .flatMap(connec

这两者之间有什么区别吗:

public Observable<List<MessageDb>> getLastXMessages(int x, String userToGetMessagesFrom){
    return MainApplication.getInstance().getRiotXmppService().getRiotConnectionManager().getConnectedUser()
            .flatMap(connectedUser -> {
                QueryBuilder qb = 
        ... 
        ...         
                return Observable.just(qb.list());
            });
}
公共可观察的getLastXMessages(int x,字符串userToGetMessagesFrom){
返回MainApplication.getInstance().getRiotXmppService().getRiotConnectionManager().getConnectedUser()
.flatMap(连接用户->{
QueryBuilder qb=
... 
...         
返回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();
            });
}
公共可观察的getLastXMessages(int x,字符串userToGetMessagesFrom){
返回MainApplication.getInstance().getRiotXmppService().getRiotConnectionManager().getConnectedUser()
.map(connectedUser->{
QueryBuilder qb=
... 
...         
返回qb.list();
});
}

是否有更好的解决方案,或者两者都很好。

FlatMap的行为非常类似于map,区别在于它本身返回一个可观察的对象,因此它非常适合在异步操作上进行映射。映射不必发射与源可观测项类型相同的项

在实际意义上,Map只是在链式响应上进行转换(不返回可观察值);虽然FlatMap返回一个Observable,但如果您计划在方法内部进行异步调用,则建议使用FlatMap,因此:

  • Map返回类型为T的对象

  • FlatMap返回一个可观察值


确保两者都能正常工作。如果您不打算异步执行这些操作,那么我更喜欢
map
,因为它比
flatMap
的开销小。您的示例(?)中似乎涉及到网络调用,因此开销可能是微不足道的