Spec-Zone.ru › ReactiveX

Фильтр

выводить только те элементы из Observable, которые проходят проверку предиката
Открыть интерактивную диаграмму на rxmarbles.com

Оператор Фильтр фильтрует Observable, позволяя проходить только те элементы, которые удовлетворяют заданному тесту в виде предикатной функции.

См. также

  • Введение в Rx: Where
  • Введение в Rx: Cast и OfType
  • RxMarbles: filter

Информация, специфичная для языка

RxGroovy filter ofType

filter

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)
ofType

В RxGroovy также существует специализированная форма оператора Фильтр, который фильтрует Observable, так что он выводит только элементы определённого класса.

ofType по умолчанию не работает с каким-либо конкретным Планировщиком.

  • Javadoc: ofType(Class)

RxJava 1․x filter ofType

filter

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)
ofType

В RxJava также существует специализированная форма оператора Фильтр, который фильтрует Observable, так что он выводит только элементы определённого класса.

ofType по умолчанию не работает с каким-либо конкретным Планировщиком.

  • Javadoc: ofType(Class)

RxJS filter where

filter

RxJS реализует этот оператор под двумя именами, но с идентичным поведением: filter и where. Этот оператор принимает два параметра: предикатную функцию и необязательный объект, который будет представлять контекст «this» функции при её выполнении.

Сама предикатная функция принимает три аргумента:

  1. элемент из исходного Observable, который должен быть отфильтрован или нет
  2. нулевой индекс этого элемента в последовательности исходного Observable
  3. объект исходного 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.js
  • rx.all.js
  • rx.all.compat.js
  • rx.compat.js
  • rx.lite.js
  • rx.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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API