Фильтр
выводить только те элементы из Observable, которые проходят проверку предиката
Оператор Фильтр фильтрует Observable, позволяя проходить только те элементы, которые удовлетворяют заданному тесту в виде предикатной функции.
См. также
Информация, специфичная для языка
RxGroovy filter ofType
RxGroovy реализует этот оператор как filter. Вы можете отфильтровать Observable, отбрасывая любые элементы, которые не удовлетворяют некоторому тесту, передав функцию фильтрации в оператор filter. Например, следующий код фильтрует список целых чисел, выводя только чётные числа (т. е. те, остаток от деления на два которых равен нулю):
Пример кода
numbers = Observable.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
numbers.filter({ 0 == (it % 2) }).subscribe(
{ println(it); }, // onNext
{ println("Error: " + it.getMessage()); }, // onError
{ println("Sequence complete"); } // onCompleted
);
2 4 6 8 Sequence complete
filter по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
filter(Func1)
В RxGroovy также существует специализированная форма оператора Фильтр, который фильтрует Observable, так что он выводит только элементы определённого класса.
ofType по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
ofType(Class)
RxJava 1․x filter ofType
RxJava реализует этот оператор как filter.
Пример кода
Observable.just(1, 2, 3, 4, 5)
.filter(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer item) {
return( item < 4 );
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
Next: 1 Next: 2 Next: 3 Sequence complete.
filter по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
filter(Func1)
В RxJava также существует специализированная форма оператора Фильтр, который фильтрует Observable, так что он выводит только элементы определённого класса.
ofType по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
ofType(Class)
RxJS filter where
RxJS реализует этот оператор под двумя именами, но с идентичным поведением: filter и where. Этот оператор принимает два параметра: предикатную функцию и необязательный объект, который будет представлять контекст «this» функции при её выполнении.
Сама предикатная функция принимает три аргумента:
- элемент из исходного Observable, который должен быть отфильтрован или нет
- нулевой индекс этого элемента в последовательности исходного Observable
- объект исходного Observable
Напишите предикатную функцию так, чтобы она возвращала true для тех элементов, которые вы хотите пропустить через фильтр к следующему наблюдателю, и false для тех элементов, которые фильтр должен заблокировать и подавить.
Пример кода
var source = Rx.Observable.range(0, 5)
.filter(function (x, idx, obs) {
return x % 2 === 0;
});
var subscription = source.subscribe(
function (x) { console.log('Next: %s', x); },
function (err) { console.log('Error: %s', err); },
function () { console.log('Completed'); });
Next: 0 Next: 2 Next: 4 Completed
filter и where можно найти в каждом из следующих дистрибутивов:
rx.jsrx.all.jsrx.all.compat.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
RxPHP filter where
RxPHP реализует этот оператор как filter.
Выводить только те элементы из Observable, которые проходят проверку предиката.
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/filter/filter.php
$observable = Rx\Observable::fromArray([21, 42, 84]);
$observable
->filter(function ($elem) {
return $elem >= 42;
})
->subscribe($stdoutObserver);
Next value: 42 Next value: 84 Complete!
RxPHP также имеет оператор where.
Псевдоним для фильтра
© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/filter.html