這就是我如何在rxjava中做到這一點,這意味着兩個觀察對象具有相同的長度。
Observable<Integer> obs1 = Observable.just(1, 2, 4, 6);
Observable<Integer> obs2 = Observable.just(1, 3, 4, 5);
obs1.zipWith(obs2, (integer, integer2) -> {
if (!Objects.equals(integer, integer2)) {
return Observable.just(integer).concatWith(Observable.just(integer2));
} else {
return Observable.empty();
}
})
.flatMap(observable -> observable)
.sorted()
.forEach(System.out::println);
編輯
另一種方法是使用一個集合
Observable<Integer> obs1 = Observable.just(1, 2, 4);
Observable<Integer> obs2 = Observable.just(1, 3, 4, 5);
obs1.mergeWith(obs2)
.sorted()
.reduce(new ArrayList<Integer>(), (integers, integer) -> {
if (integers.contains(integer)) {
integers.remove(integer);
} else {
integers.add(integer);
}
return integers;
})
.flatMapIterable(integers -> integers)
.forEach(System.out::println);
您能否提供一張大理石圖表,顯示何時發出來源的值以及如何導致產生的可觀察值? – Enigmativity
@Enigmativity我添加了一個大理石圖。 HTH –
這是一個很好的大理石圖。你是怎麼做到的?我仍然無法弄清楚規則。你能解釋一下嗎? – Enigmativity