在之前的question中,我发现了如何将子ToDo项目与父ToDo列表链接(使用嵌套的Web服务调用)。我学到了一些很酷的东西,但后来我意识到我正在拨打错误的网络服务电话!
在Basecamp中,我可以使用嵌套的待办事项列表在单个调用中返回项目的所有ToDo项目。我想做的是使用RxJava来反转结构并处理分组。
而不是:
我想:
这是我的待办事项列表类的简化版本:
public class BcxToDoList {
public String id;
public String name;
public List<BcxToDo> toDos = new ArrayList<>();
}
这是ToDo List类:
public class BcxToDo {
public String id;
public String listId;
public String content;
public BcxToDoList toDoList;
}
我想返回一个包含List<BcxToDoList>
分组的BcxToDoLists(toDos
)列表。
这是我到目前为止编写的代码:
bcxClient
.fetchToDos( SomeProjectId )
.flatMap(new Func1<List<BcxToDo>, Observable<BcxToDo>>() {
@Override
public Observable<BcxToDo> call(List<BcxToDo> bcxToDos) {
return Observable.from(bcxToDos);
}
})
.groupBy(new Func1<BcxToDo, String>() {
@Override
public String call(BcxToDo bcxToDo) {
return bcxToDo.listId;
}
})
我尝试通过bcxToDo.toDoList进行分组,但因为这是一个对象,所以每个BcxToDoList
最终只有一个BcxToDo
。按listId分组会创建所需的分组,但现在我需要将GroupedObservable<String, BcxToDo>
翻译为GroupedObservable<BcxToDoList, BcxToDo>
。
即使我计算出上述代码,我也不确定这是否是最好的方法。
答案 0 :(得分:1)
您可以使用bcxToDo.toDoList作为分组中的键,但请记住在该类中实现equals / hashCode方法(IntelliJ可以为您生成实现)。在这种情况下,您可能不再需要BcxToDoList.toDos。 groupBy输出将是
GroupedObservable<BcxToDoList, BcxToDo>>