Skip to content

Commit 0b76496

Browse files
committed
Implemented the 'Contains' operator
1 parent ea575d0 commit 0b76496

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3151,6 +3151,22 @@ public Observable<Boolean> exists(Func1<? super T, Boolean> predicate) {
31513151
return create(OperationAny.exists(this, predicate));
31523152
}
31533153

3154+
/**
3155+
* Determines whether an observable sequence contains a specified element.
3156+
*
3157+
* @param value
3158+
* The element to search in the sequence.
3159+
* @return an Observable that emits if the element is in the source sequence.
3160+
* @see <a href="http://msdn.microsoft.com/en-us/library/hh228965(v=vs.103).aspx">MSDN: Observable.Contains</a>
3161+
*/
3162+
public Observable<Boolean> contains(final T element) {
3163+
return exists(new Func1<T, Boolean>() {
3164+
public Boolean call(T t1) {
3165+
return element == null ? t1 == null : element.equals(t1);
3166+
}
3167+
});
3168+
}
3169+
31543170
/**
31553171
* Registers an {@link Action0} to be called when this Observable invokes {@link Observer#onCompleted onCompleted} or {@link Observer#onError onError}.
31563172
* <p>

rxjava-core/src/test/java/rx/ObservableTests.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,4 +741,45 @@ public void testOfTypeWithPolymorphism() {
741741
verify(aObserver, times(1)).onCompleted();
742742
}
743743

744+
@Test
745+
public void testContains() {
746+
Observable<Boolean> observable = Observable.from("a", "b", null).contains("b");
747+
748+
@SuppressWarnings("unchecked")
749+
Observer<Object> aObserver = mock(Observer.class);
750+
observable.subscribe(aObserver);
751+
verify(aObserver, times(1)).onNext(true);
752+
verify(aObserver, never()).onNext(false);
753+
verify(aObserver, never()).onError(
754+
org.mockito.Matchers.any(Throwable.class));
755+
verify(aObserver, times(1)).onCompleted();
756+
}
757+
758+
@Test
759+
public void testContainsWithNull() {
760+
Observable<Boolean> observable = Observable.from("a", "b", null).contains(null);
761+
762+
@SuppressWarnings("unchecked")
763+
Observer<Object> aObserver = mock(Observer.class);
764+
observable.subscribe(aObserver);
765+
verify(aObserver, times(1)).onNext(true);
766+
verify(aObserver, never()).onNext(false);
767+
verify(aObserver, never()).onError(
768+
org.mockito.Matchers.any(Throwable.class));
769+
verify(aObserver, times(1)).onCompleted();
770+
}
771+
772+
@Test
773+
public void testContainsWithEmptyObservable() {
774+
Observable<Boolean> observable = Observable.<String>empty().contains("a");
775+
776+
@SuppressWarnings("unchecked")
777+
Observer<Object> aObserver = mock(Observer.class);
778+
observable.subscribe(aObserver);
779+
verify(aObserver, times(1)).onNext(false);
780+
verify(aObserver, never()).onNext(true);
781+
verify(aObserver, never()).onError(
782+
org.mockito.Matchers.any(Throwable.class));
783+
verify(aObserver, times(1)).onCompleted();
784+
}
744785
}

0 commit comments

Comments
 (0)