RxJava - 按子数据结构分组
RxJava - Grouping by child data structure
在之前的 中,我了解了如何 link 子 ToDo 项目与父 ToDo 列表(使用嵌套的网络服务调用)。我学到了一些很酷的东西,但后来我意识到我进行了错误的 Web 服务调用!
在 Basecamp 中,我可以在一次调用中 return 一个项目的所有 ToDo 项目以及嵌套的 ToDo 列表。我想做的是使用 RxJava 反转结构并处理分组。
而不是:
- 待办事项 1
- 列表 1
- 待办事项 2
- 列表 1
- 待办事项 3
- 列表 2
- 待办事项 4
- 列表 2
我愿意:
- 列表 1
- 待办事项 1
- 待办事项 2
- 列表 2
- 待办事项 3
- 待办事项 4
这是我的待办事项清单的精简版 class:
public class BcxToDoList {
public String id;
public String name;
public List<BcxToDo> toDos = new ArrayList<>();
}
这是待办事项列表 class:
public class BcxToDo {
public String id;
public String listId;
public String content;
public BcxToDoList toDoList;
}
我想要 return 具有 toDos
.
分组的 BcxToDoLists (List<BcxToDoList>
) 的列表
这是我到目前为止编写的代码:
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 分组,但因为这是一个对象,我最终每个 BcxToDo
得到一个 BcxToDoList
。按 listId 分组创建所需的分组,但现在我需要将我的 GroupedObservable<String, BcxToDo>
转换为 GroupedObservable<BcxToDoList, BcxToDo>
.
即使我计算出了上面的代码,我也不确定这是否是最好的方法。
您可以使用 bcxToDo.toDoList 作为分组的键,但请记住在 class 中实现 equals/hashCode 方法(IntelliJ 可以为您生成一个实现)。在这种情况下,您可能不再需要 BcxToDoList.toDos。 groupBy 输出将是
GroupedObservable<BcxToDoList, BcxToDo>>
在之前的
在 Basecamp 中,我可以在一次调用中 return 一个项目的所有 ToDo 项目以及嵌套的 ToDo 列表。我想做的是使用 RxJava 反转结构并处理分组。
而不是:
- 待办事项 1
- 列表 1
- 待办事项 2
- 列表 1
- 待办事项 3
- 列表 2
- 待办事项 4
- 列表 2
我愿意:
- 列表 1
- 待办事项 1
- 待办事项 2
- 列表 2
- 待办事项 3
- 待办事项 4
这是我的待办事项清单的精简版 class:
public class BcxToDoList {
public String id;
public String name;
public List<BcxToDo> toDos = new ArrayList<>();
}
这是待办事项列表 class:
public class BcxToDo {
public String id;
public String listId;
public String content;
public BcxToDoList toDoList;
}
我想要 return 具有 toDos
.
List<BcxToDoList>
) 的列表
这是我到目前为止编写的代码:
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 分组,但因为这是一个对象,我最终每个 BcxToDo
得到一个 BcxToDoList
。按 listId 分组创建所需的分组,但现在我需要将我的 GroupedObservable<String, BcxToDo>
转换为 GroupedObservable<BcxToDoList, BcxToDo>
.
即使我计算出了上面的代码,我也不确定这是否是最好的方法。
您可以使用 bcxToDo.toDoList 作为分组的键,但请记住在 class 中实现 equals/hashCode 方法(IntelliJ 可以为您生成一个实现)。在这种情况下,您可能不再需要 BcxToDoList.toDos。 groupBy 输出将是
GroupedObservable<BcxToDoList, BcxToDo>>