diff --git a/rxjava-core/src/main/java/rx/Observable.java b/rxjava-core/src/main/java/rx/Observable.java index 2e11afc654..86c4424026 100644 --- a/rxjava-core/src/main/java/rx/Observable.java +++ b/rxjava-core/src/main/java/rx/Observable.java @@ -4477,6 +4477,17 @@ public Boolean call(T t) { }).cast(klass); } + /** + * Ignores all values in an observable sequence and only calls onCompleted or onError method. + * + * @return An empty observable sequence that only call onCompleted, or onError method. + * + * @see MSDN: Observable.IgnoreElements + */ + public Observable ignoreElements() { + return filter(alwaysFalse()); + } + /** * Whether a given {@link Function} is an internal implementation inside rx.* packages or not. *

diff --git a/rxjava-core/src/main/java/rx/util/functions/Functions.java b/rxjava-core/src/main/java/rx/util/functions/Functions.java index 30728600a8..356ce41173 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Functions.java +++ b/rxjava-core/src/main/java/rx/util/functions/Functions.java @@ -327,6 +327,10 @@ public static Func1 alwaysTrue() { return AlwaysTrue.INSTANCE; } + public static Func1 alwaysFalse() { + return AlwaysFalse.INSTANCE; + } + public static Func1 identity() { return new Func1() { @Override @@ -345,4 +349,12 @@ public Boolean call(Object o) { } } + private enum AlwaysFalse implements Func1 { + INSTANCE; + + @Override + public Boolean call(Object o) { + return false; + } + } } diff --git a/rxjava-core/src/test/java/rx/ObservableTests.java b/rxjava-core/src/test/java/rx/ObservableTests.java index 470fdac18b..de0c7d6e81 100644 --- a/rxjava-core/src/test/java/rx/ObservableTests.java +++ b/rxjava-core/src/test/java/rx/ObservableTests.java @@ -838,4 +838,15 @@ public void testContainsWithEmptyObservable() { org.mockito.Matchers.any(Throwable.class)); verify(aObserver, times(1)).onCompleted(); } + + public void testIgnoreElements() { + Observable observable = Observable.from(1, 2, 3).ignoreElements(); + + @SuppressWarnings("unchecked") + Observer aObserver = mock(Observer.class); + observable.subscribe(aObserver); + verify(aObserver, never()).onNext(any(Integer.class)); + verify(aObserver, never()).onError(any(Throwable.class)); + verify(aObserver, times(1)).onCompleted(); + } } \ No newline at end of file