В чём разница между stateful и stateless операциями в стримах? Приведи примеры.
Answer from AI
sobes.tech AI
В контексте стримов (например, в Dart или Java Streams) операции делятся на stateful и stateless в зависимости от того, требуют ли они сохранения состояния для обработки элементов.
-
Stateless операции не зависят от предыдущих элементов и обрабатывают каждый элемент независимо. Они не хранят промежуточного состояния. Примеры:
map,filter,forEach. -
Stateful операции требуют хранения некоторого состояния, чтобы обработать текущий элемент. Например, операции, которые зависят от порядка или требуют агрегации. Примеры:
distinct(нужно хранить уже встреченные элементы),sorted(нужно сохранить все элементы для сортировки),skip,limit.
Пример на Dart:
var numbers = [1, 2, 2, 3, 4];
// Stateless: map - каждый элемент умножается на 2 независимо
var doubled = numbers.map((n) => n * 2);
// Stateful: distinct - нужно помнить, какие элементы уже были
var unique = numbers.toSet();
print(doubled.toList()); // [2, 4, 4, 6, 8]
print(unique.toList()); // [1, 2, 3, 4]
Таким образом, stateless операции проще и эффективнее, так как не требуют дополнительной памяти для состояния, а stateful операции могут быть более затратными по ресурсам.