Skip to content

Commit 8f66c61

Browse files
committed
Implemented sequenceEqual method
1 parent 8cdeafd commit 8f66c61

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
@@ -1511,6 +1511,50 @@ public static <R, T0, T1> Observable<R> zip(Observable<T0> w0, Observable<T1> w1
15111511
return _create(OperationZip.zip(w0, w1, reduceFunction));
15121512
}
15131513

1514+
1515+
/**
1516+
* Determines whether two sequences are equal by comparing the elements pairwise.
1517+
*
1518+
* @param first observable to compare
1519+
* @param second observable to compare
1520+
* @param <T> type of sequence
1521+
* @return sequence of booleans, true if two sequences are equal by comparing the elements pairwise; otherwise, false.
1522+
*/
1523+
public static <T> Observable<Boolean> sequenceEqual(Observable<T> first, Observable<T> second) {
1524+
return sequenceEqual(first, second, new Func2<T, T, Boolean>() {
1525+
@Override
1526+
public Boolean call(T first, T second) {
1527+
return first.equals(second);
1528+
}
1529+
});
1530+
}
1531+
1532+
/**
1533+
* Determines whether two sequences are equal by comparing the elements pairwise using a specified equality function.
1534+
*
1535+
* @param first observable sequence to compare
1536+
* @param second observable sequence to compare
1537+
* @param equality a function used to compare elements of both sequences
1538+
* @param <T> type of sequence
1539+
* @return sequence of booleans, true if two sequences are equal by comparing the elements pairwise; otherwise, false.
1540+
*/
1541+
private static <T> Observable<Boolean> sequenceEqual(Observable<T> first, Observable<T> second, Func2<T, T, Boolean> equality) {
1542+
return zip(first, second, equality);
1543+
}
1544+
1545+
/**
1546+
* Determines whether two sequences are equal by comparing the elements pairwise using a specified equality function.
1547+
*
1548+
* @param first observable sequence to compare
1549+
* @param second observable sequence to compare
1550+
* @param equality a function used to compare elements of both sequences
1551+
* @param <T> type of sequence
1552+
* @return sequence of booleans, true if two sequences are equal by comparing the elements pairwise; otherwise, false.
1553+
*/
1554+
private static <T> Observable<Boolean> sequenceEqual(Observable<T> first, Observable<T> second, Object equality) {
1555+
return zip(first, second, equality);
1556+
}
1557+
15141558
/**
15151559
* Returns an Observable that applies a function of your choosing to the combination of items
15161560
* emitted, in sequence, by two other Observables, with the results of this function becoming the
@@ -2345,5 +2389,18 @@ public Integer call(Integer t1, Integer t2) {
23452389
verify(w).onNext(60);
23462390
}
23472391

2392+
@Test
2393+
public void testSequenceEqual() {
2394+
Observable<Integer> first = toObservable(1, 2, 3);
2395+
Observable<Integer> second = toObservable(1, 2, 4);
2396+
@SuppressWarnings("unchecked")
2397+
Observer<Boolean> result = mock(Observer.class);
2398+
sequenceEqual(first, second).subscribe(result);
2399+
verify(result, times(2)).onNext(true);
2400+
verify(result, times(1)).onNext(false);
2401+
}
2402+
2403+
2404+
23482405
}
23492406
}

0 commit comments

Comments
 (0)