Метод where
Метод where класса Iterable фильтрует элементы коллекции
и возвращает новую коллекцию, в которую попадают только те элементы,
для которых переданная функция-предикат вернула true.
Исходная коллекция при этом не изменяется.
В первый параметр метода мы передаем функцию, которая принимает
текущий элемент коллекции и возвращает bool. Если функция
возвращает true - элемент попадает в результат, если false -
элемент пропускается. Метод возвращает ленивый Iterable,
то есть фильтрация выполняется только в момент обращения к элементам.
Синтаксис
iterable.where(bool Function(T element) test)
Пример
Давайте отфильтруем список чисел и оставим только четные:
void main()
{
Iterable<int> numbers = [1, 2, 3, 4, 5];
Iterable<int> res = numbers.where((int num) => num % 2 == 0);
print(res.toList());
}
Результат выполнения кода:
[2, 4]
Пример
Давайте отфильтруем список строк и оставим только строки длиной
больше 1:
void main()
{
Iterable<String> strings = ['abcde', 'a', 'ab', 'b', 'abc'];
Iterable<String> res = strings.where((String str) => str.length > 1);
print(res.toList());
}
Результат выполнения кода:
["abcde", "ab", "abc"]
Пример
Метод where возвращает ленивую коллекцию, поэтому к результату
можно сразу применять другие методы, например map:
void main()
{
Iterable<int> numbers = [1, 2, 3, 4, 5];
Iterable<int> res = numbers
.where((int num) => num > 2)
.map((int num) => num * 10);
print(res.toList());
}
Результат выполнения кода:
[30, 40, 50]
Смотрите также
-
метод
whereType,
который фильтрует элементы по типу -
метод
firstWhere,
который возвращает первый подходящий элемент -
метод
any,
который проверяет, есть ли хотя бы один подходящий элемент -
метод
toList,
который преобразует коллекцию в список