Карта
преобразовать элементы, испускаемые Observable, применяя функцию к каждому элементу
Оператор Map применяет функцию по вашему выбору к каждому элементу, испускаемому исходным Observable, и возвращает Observable, который испускает результаты этих применений функций.
См. также
- FlatMap
- Введение в Rx: Select
- RxMarbles:
map - 101 Примеры Rx: Select — Индексированный
- Использование метода map с Observable от Джафара Хусейна (видеоурок по JavaScript)
Информация, специфичная для языка
RxGroovy byLine cast encode map
RxGroovy реализует этот оператор как map. Например, следующий код отображает функцию, которая возводит в квадрат входящее значение, на значения в numbers:
Пример кода
numbers = Observable.from([1, 2, 3, 4, 5]);
numbers.map({it * it}).subscribe(
{ println(it); }, // onNext
{ println("Error: " + it.getMessage()); }, // onError
{ println("Sequence complete"); } // onCompleted
); 1 4 9 16 25 Sequence complete
Этот оператор по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
map(Func1)
Оператор cast является специализированной версией Map, которая преобразует каждый элемент из исходного Observable, преобразовав его в конкретный класс перед повторной передачей.
- Javadoc:
cast(Class)
В классе StringObservable, который не входит в ядро RxGroovy, также есть специализированный оператор отображения, encode, который преобразует Observable, испускающий строки, в Observable, испускающий массивы байтов, которые учитывают границы символов многобайтовых символов в исходных строках.
Также в классе StringObservable, который не входит в ядро RxGroovy, есть специализированный оператор отображения, называемый byLine, который преобразует Observable, испускающий строки, в Observable, испускающий строки текста, буферизуя строки из исходного Observable, пока не найдена символы новой строки в одном из них.
RxJava 1․x byLine cast encode map
RxJava реализует этот оператор как map.
Этот оператор по умолчанию не работает с каким-либо конкретным Планировщиком.
- Javadoc:
map(Func1)
Оператор cast является специализированной версией Map, которая преобразует каждый элемент из исходного Observable, преобразовав его в конкретный класс перед повторной передачей.
- Javadoc:
cast(Class)
В классе StringObservable, который не входит в ядро RxJava, также есть специализированный оператор отображения, encode, который преобразует Observable, испускающий строки, в Observable, испускающий массивы байтов, которые учитывают границы символов многобайтовых символов в исходных строках.
Также в классе StringObservable, который не входит в ядро RxJava, есть специализированный оператор отображения, называемый byLine, который преобразует Observable, испускающий строки, в Observable, испускающий строки текста, буферизуя строки из исходного Observable, пока не найдена символы новой строки в одном из них.
RxJS map pluck select
RxJS реализует этот оператор как map или select (они синонимичны). В дополнение к функции преобразования, вы можете передать этому оператору необязательный второй параметр, который станет контекстом «this», в котором будет выполняться функция преобразования.
Функция преобразования получает три параметра:
- испускаемый элемент
- индекс этого элемента в последовательности испускаемых элементов
- Observable, из которого был испущен этот элемент
Пример кода
// Using a value
var md = Rx.Observable.fromEvent(document, 'mousedown').map(true);
var mu = Rx.Observable.fromEvent(document, 'mouseup').map(false);
// Using a function
var source = Rx.Observable.range(1, 3)
.select(function (x, idx, obs) {
return x * x;
});
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); }); Next: 1 Next: 4 Next: 9 Completed
Также существует оператор pluck, который является упрощенной версией этого оператора. Он преобразует элементы, испускаемые исходным Observable, извлекая единственное именованное свойство из этих элементов и испускает это свойство вместо них.
Пример кода
var source = Rx.Observable
.fromArray([
{ value: 0 },
{ value: 1 },
{ value: 2 }
])
.pluck('value');
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); }); Next: 0 Next: 1 Next: 2 Completed
map/select и pluck находятся в каждом из следующих распределений:
rx.jsrx.all.jsrx.all.compat.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
См. также
-
Rx.helpers.pluck(property)из книги RxJS от Денниса Стоянова
RxPHP map mapWithIndex mapTo select pluck
RxPHP реализует этот оператор как map.
Принимает функцию преобразования, которая работает с каждым элементом.
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/map/map.php
$observable = \Rx\Observable::fromArray([21, 42]);
$observable
->map(function ($elem) {
return $elem * 2;
})
->subscribe($stdoutObserver); Next value: 42 Next value: 84 Complete!
RxPHP также имеет оператор mapWithIndex.
Вариант оператора map, который вызывает селектор map с индексом и значением
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/map/mapWithIndex.php
$subscriptions = Rx\Observable::fromArray([21, 42])
->mapWithIndex(function ($index, $elem) {
return $index + $elem;
})
->subscribe($stdoutObserver); Next value: 21 Next value: 43 Complete!
RxPHP также имеет оператор mapTo.
Отображает каждое значение на то же значение каждый раз
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/map/mapTo.php
$subscription = Rx\Observable::fromArray([21, 42])
->mapTo(1)
->subscribe($stdoutObserver); Next value: 1 Next value: 1 Complete!
RxPHP также имеет оператор select.
Псевдоним для Map
RxPHP также имеет оператор pluck.
Возвращает Observable, содержащий значение указанного индекса массива (если массив) или свойства (если объект) из всех элементов в последовательности Observable. Если свойство не может быть определено, observable выдаст ошибку.
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/pluck/pluck.php
$source = Rx\Observable::fromArray([
(object)['value' => 0],
(object)['value' => 1],
(object)['value' => 2]
])
->pluck('value');
$subscription = $source->subscribe($stdoutObserver); Next value: 0 Next value: 1 Next value: 2 Complete!
© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/map.html