Метод transform
Метод transform преобразует поток данных
с помощью заданного преобразователя. В первый
параметр мы передаем объект типа StreamTransformer,
который описывает правила преобразования
элементов потока. Метод возвращает новый поток,
элементы которого являются результатом
применения преобразователя к исходному потоку.
Синтаксис
Stream<T> transform<S>(StreamTransformer<T, S> streamTransformer)
Пример
Давайте создадим поток из списка чисел и
преобразуем его, умножая каждый элемент на 2
с помощью StreamTransformer.fromHandlers:
import 'dart:async';
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
StreamTransformer<int, int> transformer =
StreamTransformer.fromHandlers(
handleData: (value, sink)
{
sink.add(value * 2);
}
);
Stream<int> res = stream.transform(transformer);
res.listen((value) => print(value));
}
Результат выполнения кода:
2
4
6
8
10
Пример
Давайте создадим поток из строк и преобразуем его, добавляя к каждой строке восклицательный знак:
import 'dart:async';
void main()
{
Stream<String> stream = Stream.fromIterable(['a', 'b', 'c', 'd', 'e']);
StreamTransformer<String, String> transformer =
StreamTransformer.fromHandlers(
handleData: (value, sink)
{
sink.add(value + '!');
}
);
Stream<String> res = stream.transform(transformer);
res.listen((value) => print(value));
}
Результат выполнения кода:
"a!"
"b!"
"c!"
"d!"
"e!"
Пример
Давайте преобразуем поток чисел, отфильтровывая
только четные значения с помощью
StreamTransformer.fromHandlers:
import 'dart:async';
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
StreamTransformer<int, int> transformer =
StreamTransformer.fromHandlers(
handleData: (value, sink)
{
if (value % 2 == 0)
{
sink.add(value);
}
}
);
Stream<int> res = stream.transform(transformer);
res.listen((value) => print(value));
}
Результат выполнения кода:
2
4