我采取的方法是:
-
merge
两条小溪
-
filter
考虑到“左”和“右”源的空/空的每个值
-
应用
distinct
删除重复项
一切都是这样的:
@Test
public void find_intersection_between_two_lists() {
final List<String> leftValues = Arrays.asList("1", "2", "3");
final List<String> rightValues = Arrays.asList("1", "2", "4");
final Observable<String> left = Observable.fromIterable(leftValues);
final Observable<String> right = Observable.fromIterable(rightValues);
Observable.merge(left, right)
.filter(value -> {
if((leftValues == null || leftValues.isEmpty()) && (rightValues != null && !rightValues.isEmpty())) {
return rightValues.contains(value);
} else if((leftValues != null && !leftValues.isEmpty()) && (rightValues == null || rightValues.isEmpty())) {
return leftValues.contains(value);
} else {
return leftValues.contains(value) && rightValues.contains(value);
}
})
.distinct()
.subscribe(
result -> {
System.out.println("## onNext(" + result + ")");
},
error -> {
System.out.println("## onError("+ error.getMessage() + ")");
},
() -> {
System.out.println("## onComplete()");
}
);
}
这个
滤波器
代码很难看。我想知道是否有一种更习惯的方法来做这件事…但它起作用了。
如果没有别的,希望它至少能激发一些想法!