Метод expand
Метод expand класса Stream принимает
функцию-преобразователь, которая для каждого
элемента исходного потока возвращает коллекцию
(например, список или другую итерируемую
последовательность). Все полученные коллекции
объединяются в один общий поток, элементы
которого идут по порядку. Первым параметром
метод принимает функцию-преобразователь,
в которую передаётся очередной элемент потока
и возвращается новая последовательность.
Синтаксис
Stream<T> expand<T>(Iterable<T> Function(S) convert)
Пример
Давайте преобразуем каждый элемент потока в список из двух чисел:
void main()
{
Stream.fromIterable([1, 2, 3]).expand((int n) => [n, n * 10]).listen((int n) {
print(n);
});
}
Результат выполнения кода:
1
10
2
20
3
30
Пример
Давайте разобьём каждую строку потока
на отдельные символы и соберём результат
в общий список с помощью toList:
void main()
{
Stream.fromIterable(['abcde', '12345']).expand((String str) => str.split('')).toList().then((List<String> res) {
print(res);
});
}
Результат выполнения кода:
[a, b, c, d, e, 1, 2, 3, 4, 5]
Пример
Давайте превратим каждый элемент потока в пустой или непустой список, чтобы увидеть, как ведёт себя метод при отсутствии данных:
void main()
{
Stream.fromIterable([1, 2, 3]).expand((int n) => n.isEven ? [n] : []).toList().then((List<int> res) {
print(res);
});
}
Результат выполнения кода:
[2]
Смотрите также
-
метод
map,
который преобразует каждый элемент потока -
метод
asyncExpand,
который асинхронно разворачивает элементы -
метод
where,
который фильтрует элементы потока -
метод
toList,
который собирает поток в список