Skip to content

Commit dbb4dc1

Browse files
Merge pull request ReactiveX#138 from mairbek/SequenceEqual
Implemented SequenceEqual Operator
2 parents ccd17ac + 8f66c61 commit dbb4dc1

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

rxjava-core/src/main/java/rx/Observable.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,50 @@ public static <R, T0, T1> Observable<R> zip(Observable<T0> w0, Observable<T1> w1
15261526
return _create(OperationZip.zip(w0, w1, reduceFunction));
15271527
}
15281528

1529+
1530+
/**
1531+
* Determines whether two sequences are equal by comparing the elements pairwise.
1532+
*
1533+
* @param first observable to compare
1534+
* @param second observable to compare
1535+
* @param <T> type of sequence
1536+
* @return sequence of booleans, true if two sequences are equal by comparing the elements pairwise; otherwise, false.
1537+
*/
1538+
public static <T> Observable<Boolean> sequenceEqual(Observable<T> first, Observable<T> second) {
1539+
return sequenceEqual(first, second, new Func2<T, T, Boolean>() {
1540+
@Override
1541+
public Boolean call(T first, T second) {
1542+
return first.equals(second);
1543+
}
1544+
});
1545+
}
1546+
1547+
/**
1548+
* Determines whether two sequences are equal by comparing the elements pairwise using a specified equality function.
1549+
*
1550+
* @param first observable sequence to compare
1551+
* @param second observable sequence to compare
1552+
* @param equality a function used to compare elements of both sequences
1553+
* @param <T> type of sequence
1554+
* @return sequence of booleans, true if two sequences are equal by comparing the elements pairwise; otherwise, false.
1555+
*/
1556+
private static <T> Observable<Boolean> sequenceEqual(Observable<T> first, Observable<T> second, Func2<T, T, Boolean> equality) {
1557+
return zip(first, second, equality);
1558+
}
1559+
1560+
/**
1561+
* Determines whether two sequences are equal by comparing the elements pairwise using a specified equality function.
1562+
*
1563+
* @param first observable sequence to compare
1564+
* @param second observable sequence to compare
1565+
* @param equality a function used to compare elements of both sequences
1566+
* @param <T> type of sequence
1567+
* @return sequence of booleans, true if two sequences are equal by comparing the elements pairwise; otherwise, false.
1568+
*/
1569+
private static <T> Observable<Boolean> sequenceEqual(Observable<T> first, Observable<T> second, Object equality) {
1570+
return zip(first, second, equality);
1571+
}
1572+
15291573
/**
15301574
* Returns an Observable that applies a function of your choosing to the combination of items
15311575
* emitted, in sequence, by two other Observables, with the results of this function becoming the
@@ -2360,5 +2404,18 @@ public Integer call(Integer t1, Integer t2) {
23602404
verify(w).onNext(60);
23612405
}
23622406

2407+
@Test
2408+
public void testSequenceEqual() {
2409+
Observable<Integer> first = toObservable(1, 2, 3);
2410+
Observable<Integer> second = toObservable(1, 2, 4);
2411+
@SuppressWarnings("unchecked")
2412+
Observer<Boolean> result = mock(Observer.class);
2413+
sequenceEqual(first, second).subscribe(result);
2414+
verify(result, times(2)).onNext(true);
2415+
verify(result, times(1)).onNext(false);
2416+
}
2417+
2418+
2419+
23632420
}
23642421
}

0 commit comments

Comments
 (0)