Tax*_*Noi 4 android rx-java rx-android
我是RxJava的新手,经常被flatMap函数搞糊涂了.根据doc,flatmaptransform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable
有人能为它提供一个好的用例吗?为什么将原始的Observable转换为Observables(复数),然后将它们转换为单个Observable.
你为什么不用'地图'?
如果你在Android中给出一个很棒的例子,那么普通的Java就足够了.谢谢
Ale*_*der 23
我Android在你的问题上看到了标签.所以,可能你应该熟悉Retrofit.
让我们想象您有两种方法:
public interface FoxreyRestApi {
@POST("/signin")
Observable<SignInResponse> signin(@Body SignInRequest request);
@GET("/user")
Observable<User> getUser(String accessToken);
}
Run Code Online (Sandbox Code Playgroud)
您想要获取用户数据,但您需要accessToken,返回的是SignInResponse.
你可以这样做:
1).创建你的RestAdapter.
2).一个接一个地查询:
restAdapter.signin(request)
.flatMap(r -> restAdapter.getUser(r.getAccessToken()))
.subscribe(user -> {/*User your user*/});
Run Code Online (Sandbox Code Playgroud)
假设你有一个
Observable<Foo> fooObservable;
Run Code Online (Sandbox Code Playgroud)
并且你想要调用另一种方法来接受Foo并发出一个Observable<Bar>
就像是:
public Observable<Bar> getBars(Foo foo);
Run Code Online (Sandbox Code Playgroud)
如果你这样做:
fooObservable.map(foo -> getBars(foo));
Run Code Online (Sandbox Code Playgroud)
你最终得到的是Observable<Observable<Bar>>因为你已经改变了你的Foo- > Observable<Bar>这可能不是你想要的.
相反,你可以使用flatMap哪个"展平可观察的":
Observable<Bar> barObservable = fooObservable.flatMap(foo -> getBars(foo));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2270 次 |
| 最近记录: |