Метод expand
Метод expand класса Iterable преобразует
каждый элемент исходной коллекции в другую коллекцию
(или последовательность) и объединяет все полученные
коллекции в одну плоскую последовательность.
В первый параметр мы передаем функцию-преобразователь,
которая принимает текущий элемент и возвращает
новую коллекцию. Метод возвращает новый объект
Iterable, элементы которого являются
результатом объединения всех вложенных коллекций
в порядке их следования.
Синтаксис
iterable.expand(convert)
Пример
Давайте преобразуем каждое число в список из двух чисел и объединим результаты в одну плоскую последовательность:
void main()
{
Iterable<int> nums = [1, 2, 3];
Iterable<int> res = nums.expand((num) => [num, num * 10]);
print(res.toList());
}
Результат выполнения кода:
[1, 10, 2, 20, 3, 30]
Пример
Давайте разобьем каждую строку на отдельные символы и получим общую последовательность символов:
void main()
{
Iterable<String> words = ['abcde', '12345'];
Iterable<String> res = words.expand((word) => word.split(''));
print(res.toList());
}
Результат выполнения кода:
[a, b, c, d, e, 1, 2, 3, 4, 5]
Пример
Давайте отфильтруем пустые вложенные коллекции, чтобы в итоговой последовательности остались только нужные элементы:
void main()
{
Iterable<int> nums = [1, 2, 3, 4, 5];
Iterable<int> res = nums.expand((num) => num % 2 == 0 ? [num] : []);
print(res.toList());
}
Результат выполнения кода:
[2, 4]