Многие функции ожидают перечисления и возвращают список обратно. Это означает, что при выполнении нескольких операций с Enum каждая операция будет генерировать промежуточный список, пока мы не достигнем результата.
Потоки поддерживают ленивые операции, а не активные операции перечислений. Короче говоря, потоки являются ленивыми, компонуемыми перечислимыми . Это означает, что Streams не выполняет операцию, если она не является абсолютно необходимой. Давайте рассмотрим пример, чтобы понять это —
odd? = &(rem(&1, 2) != 0) res = 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum IO.puts(res)
Когда вышеуказанная программа запущена, она дает следующий результат —
7500000000
В приведенном выше примере 1..100_000 |> Stream.map (& (& 1 * 3)) возвращает тип данных, фактический поток, который представляет вычисление карты в диапазоне 1..100_000. Он еще не оценил это представление. Вместо создания промежуточных списков потоки создают серию вычислений, которые вызываются только тогда, когда мы передаем основной поток в модуль Enum. Потоки полезны при работе с большими, возможно бесконечными, коллекциями.
Потоки и перечисления имеют много общих функций. Потоки в основном предоставляют те же функции, которые предоставляет модуль Enum, который генерирует списки в качестве возвращаемых значений после выполнения вычислений для входных перечислимых элементов. Некоторые из них перечислены в следующей таблице —
кусок (перечисление, n, шаг, остаток \\ nil)
Потоки перечислимых в чанках, содержащих по n элементов каждый, где каждый новый чанк запускает пошаговые элементы в перечислимых.
CONCAT (перечислимых)
Создает поток, который перечисляет каждое перечисляемое в перечисляемом.
каждый (перечисление, веселье)
Выполняет данную функцию для каждого элемента.
фильтр (перечисление, веселье)
Создает поток, который фильтрует элементы в соответствии с заданной функцией при перечислении.
карта (перечисление, веселье)
Создает поток, который будет применять данную функцию при перечислении.
drop (enum, n)
Лениво выбрасывает следующие n предметов из перечисленного.