我正在编写一个小应用程序来熟悉FRP范例和RxJava。
我有两种方法; getUsers()
和getNextTask(userId)
。这些方法分别返回Observable<User>
和Observable<Task>
,getNextTask依赖于从getUsers Observable发出的用户项。
我编写了以下代码,它使用UserSummary
将两个调用的结果合并为一个对象flatMap()
:
getUsers()
.flatMap(u -> (Observable<UserSummary>) getNextTask(u.getId()).map(t -> new UserSummary(u, t))
.subscribe(System.out::println);
此代码工作正常并发出我期望的值,但是,我期望UserSummary
类型的值,而是接收类型为Object
的值,然后我将其转换为UserSummary
。
我的问题是,flatMap()
是一个调用getNextTask()
的好地方,还是可能有一种更有效的方法来调用具有依赖关系的方法?
修改
关于flatMap
返回Observable<Object>
而不是Observable<UserSummary>
,正如我对通用方法所期望的那样,以下快速摘录说明了问题。 flatMap运算符应返回Observable<String>
,但返回Observable<Object>
。因此,必须将回报转换为各自的类型。
Integer[] numberArray = {1, 2, 3, 4, 5};
Observable.from(numberArray)
.flatMap(i -> {
String[] letterArray = {"a", "b", "c", "d", "e"};
return Observable.from(letterArray)
.map(x -> x + i);
}).subscribe(System.out::println);