Метод where
Метод where класса Stream создает новый поток,
который содержит только те элементы исходного потока,
для которых переданная функция-предикат вернула true.
В первый параметр мы передаем функцию проверки, которая
принимает элемент потока и возвращает bool.
Элементы, для которых функция вернула false,
в результирующий поток не попадают.
Синтаксис
Stream<T> where(bool test(T element))
Пример
Давайте отфильтруем поток и оставим только четные числа:
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
stream.where((int num) => num % 2 == 0).listen((int num) {
print(num);
});
}
Результат выполнения кода:
2
4
Пример
Давайте отфильтруем поток строк и оставим только
те, которые начинаются с буквы 'a':
void main()
{
Stream<String> stream = Stream.fromIterable(['abcde', 'bcdea', 'acbde']);
stream.where((String str) => str.startsWith('a')).listen((String str) {
print(str);
});
}
Результат выполнения кода:
"abcde"
"acbde"
Пример
Давайте применим фильтрацию несколько раз подряд,
чтобы оставить только числа больше 1 и меньше 5:
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
stream
.where((int num) => num > 1)
.where((int num) => num < 5)
.listen((int num) {
print(num);
});
}
Результат выполнения кода:
2
3
4