层次结构
List<Job> myJob;
//将两个列表视为不为空
List<Tasks> myTasks = myJob.getTasks();
我目前正在使用以下代码
Observable.just(myJob)
.subscribeOn(Schedulers.computation())
.concatMap(Observable::fromIterable)
.subscribe(new DefaultObserver<Job>() {
@Override
public void onNext(@NonNull Job myJob) {
Log.d(Utils.APP_LOG,
"Total Task: n " +
"Job id-" + myJob.getJobId()
+ "tasks-" + myJob.getTasks().size());
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
我能够获取父(myjob)列表和子(任务)列表。现在,我想将每个作业的任务列表组合到一个列表中。
我尝试使用此接受的答案执行查询,但是在我的方案作业(父)列表大小和任务(儿童)列表大小都是动态的。
Single<List<Tasks>> taskObservable = Observable.fromIterable(myJob)
.flatMapIterable(Job::getTasks)
.toList();
上述代码将执行以下操作:
- 获取您的工作列表,然后将其转换为发出
Job
S
的流 - 对于每项工作,将其转换为发射
Tasks
的流 - 将所有发射的任务收集到一个列表中,并发出
List
如果任务可以引用其父,则在您的情况下会有所帮助。要获取所有任务的列表,您可以使用flatMap
或concatMap
:
Observable.just(myJob)
.subscribeOn(Schedulers.computation())
.concatMap(Observable::fromIterable)
.flatMapIterable(job -> job.getTasks())
.subscribe(new DefaultObserver<Task>() {
@Override
public void onNext(@NonNull Task myTask) {
Log.d(Utils.APP_LOG,
"Total Task: n " +
"Job id-" + myTask.getJob().getId()
+ "tasks-" + myTask);
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});