我有以下课程:
class Parent {
List<Child> children;
}
class Child {
Parent parent;
}
最初我有一个Parent
的列表。我想做以下事情:
Parents
的列表转换为Child
ren Child
ren Parent
列表,其children
列表仅包含相应的已过滤Child
人例如:
[Parent1 {[child1, child2]},
Parent2 {[child3, child4]}]
使用偶数索引过滤所有Child
ren:
[Parent1 {[child2]},
Parent2 {[child4]}]
目前我这样做:
List<Parent> allParents = ...
allParents.flatMap(Observable::from)
.map(parent -> parent.children)
.flatMap(Observable::from)
.filter(child -> child.index % 2 == 0)
但我不知道如何将其转换回所需的Parent
列表。请不要在children
个对象中修改Parent
列表,但我想要最初列在列表中的Parent
个对象。提前谢谢!
答案 0 :(得分:1)
只需将其映射回来并使用distinct:
...
.map(child -> child.parent)
.distinct()
...
<强>更新强>
如果您使用的是Java 8,那么您可以直接将过滤功能应用于子列表并删除所有不必要的内容:
Observable.from(parents)
.doOnNext(p -> p.children.removeIf(c -> c.index % 2 != 0))
.filter(p -> !p.children.isEmpty())
.subscribe(...)
更新2:
Observable.from(parents)
.flatMapIterable(p -> {
List<Child> cs = new ArrayList<>(p.children);
p.children.clear();
return cs;
})
.filter(c -> c.index % 2 == 0)
.doOnNext(c -> c.parent.children.add(c))
.map(c -> c.parent);
.distinct()
.subscribe(...)