我有两个String的可观察列表。我想使用zip或其他任何操作在rxjava中实现类似的功能。
如果list1有数据而list2没有任何数据-请考虑list1的数据集
如果list1没有数据,而list2有任何数据-请考虑list2的数据集
如果list1和list2都有数据,则取两个list的交点
List1具有0-n个元素,list2具有0-m个元素。
答案 0 :(得分:0)
使用RxJava尚无官方方法。我建议在其中一个Observable上使用flatMap,然后通过另一个Observable过滤每个元素。我现在无法测试,但应该可以。
编辑:类似
list1
.defaultIfEmpty(/*Observable with empty string, for instance (for the empty case)*/)
.flatMap { element ->
return list2.defaultIfEmpty(element).filter(x -> x == element);
}
.observeOn(...)
.subscribeOn(...)
.subscribe(...)
自从我使用RxJava已经有几个月了,但是这种方法应该可以工作。
答案 1 :(得分:0)
您可以使用zip
准备好两个列表,然后根据其状态进行选择:
Single<List<Integer>> singleList1 = ...
Single<List<Integer>> singleList2 = ...
Single.zip(singleList1, singleList2, (list1, list2) -> {
if (list1.isEmpty()) {
return list2;
}
if (list2.isEmpty()) {
return list1;
}
Set<Integer> set = new HashSet<>(list1);
List<Integer> result = new ArrayList<>(list2.size());
for (Integer i : list2) {
if (set.contains(i)) {
result.add(i);
}
}
return result;
});