-
Notifications
You must be signed in to change notification settings - Fork 2
Filtering Operators
This section explains operators for filtering and selecting elements.
You can filter a Observable, discarding any values that do not meet some test, by passing a filtering closure into the Observable.filter()
method. For example, the following code filters a list of integers, emitting only those that are even (that is, where the remainder from dividing the number by two is zero):
numbers = Observable.toObservable([1, 2, 3, 4, 5, 6, 7, 8, 9]);
Observable.filter(numbers, { 0 == (it % 2) }).subscribe(
[ onNext:{ response.getWriter().println(it); },
onCompleted:{ response.getWriter().println("Sequence complete"); },
onError:{ response.getWriter().println("Error encountered"); } ]
);
2
4
6
8
Sequence complete
In addition to calling filter()
as a stand-alone method, you can also call it as a method of a Observable object, so, in the example above, instead of
Observable.filter(numbers, { 0 == (it %2) }) ...
you could instead write
numbers.filter({ 0 == (it % 2) }) ...
To convert a Observable that emits several objects into one that only emits the last of these objects before completing, use the last()
method. For instance, in the following code, last()
emits only the last integer in the list of integers represented by numbers
:
numbers = Observable.toObservable([1, 2, 3, 4, 5, 6, 7, 8, 9]);
Observable.last(numbers).subscribe(
[ onNext:{ response.getWriter().println(it); },
onCompleted:{ response.getWriter().println("Sequence complete"); },
onError:{ response.getWriter().println("Error encountered"); } ]
);
9
Sequence complete
In addition to calling last()
as a stand-alone method, you can also call it as a method of a Observable object, so, in the example above, instead of
Observable.last(numbers) ...
you could instead write
numbers.last() ...
You can ignore the first n items emitted by a Observable and attend only to those items that come after, by modifying the Observable with the Observable.skip(n)
method.
numbers = Observable.toObservable([1, 2, 3, 4, 5, 6, 7, 8, 9]);
Observable.skip(numbers, 3).subscribe(
[ onNext:{ response.getWriter().println(it); },
onCompleted:{ response.getWriter().println("Sequence complete"); },
onError:{ response.getWriter().println("Error encountered"); } ]
);
4
5
6
7
8
9
Sequence complete
In addition to calling skip()
as a stand-alone method, you can also call it as a method of a Observable object, so, in the example above, instead of
Observable.skip(numbers, 3) ...
you could instead write
numbers.skip(3) ...
You can choose to pay attention only to the first n values emitted by a Observable by calling its take(n)
method. That method returns a Observable that will call a subscribing observer’s onNext
closure a maximum of n times before calling onCompleted
. For example,
numbers = Observable.toObservable([1, 2, 3, 4, 5, 6, 7, 8, 9]);
Observable.take(numbers, 3).subscribe(
[ onNext:{ response.getWriter().println(it); },
onCompleted:{ response.getWriter().println("Sequence complete"); },
onError:{ response.getWriter().println("Error encountered"); } ]
);
1
2
3
Sequence complete
In addition to calling take()
as a stand-alone method, you can also call it as a method of a Observable object, so, in the example above, instead of
Observable.take(numbers, 3) ...
you could instead write
numbers.take(3) ...
If you call take(n)
on a Observable, and that Observable emits fewer than n items before completing, the new, take
-modified Observable will not throw an error, but will merely emit this same fewer number of items before it completes.
A Netflix Original Production
Tech Blog | Twitter @NetflixOSS | Twitter @RxJava | Jobs