Поток из списка в Dart
Данные часто уже лежат в List. Фабрика
Stream.fromIterable оборачивает список
в Stream: элементы отдаются по одному
в том же порядке, что при обходе коллекции.
Список строк становится потоком без ручного
yield в цикле:
import 'dart:async';
void main() async {
List<String> palette = ['cyan', 'magenta', 'yellow'];
Stream<String> hues = Stream.fromIterable(palette);
await for (String hue in hues) {
print(hue);
}
}
Три названия цвета идут подряд. Метод
fromIterable не копирует список ради
нового типа - лишь меняет способ чтения на
последовательную выдачу.
После обертки доступны те же операторы, что у других потоков:
import 'dart:async';
void main() async {
List<int> ids = [4, 7, 10, 13];
Stream<int> stream = Stream.fromIterable(ids);
Stream<int> big = stream.where((int id) {
return id > 6;
});
await for (int id in big) {
print(id);
}
}
Печатаются 7, 10 и 13.
Исходный список при этом не меняется.
Дан список "mon", "tue",
"wed". Превратите его в поток через
Stream.fromIterable и выведите все дни.
Список чисел 2, 5, 8,
11 соберите как поток, удвойте каждый
элемент через map и напечатайте
результат.