Операции со списками выполняются сразу же — каждая промежуточная операция (например map или filter) обрабатывается немедленно и создаёт новую промежуточную коллекцию в памяти перед тем, как начнётся следующая операция.
Операции с последовательностями выполняются лениво — обработка не происходит до тех пор, пока не будет вызвана терминальная операция (такая как toList() или first()).
С Sequence каждый элемент проходит через всю цепочку операций прежде чем обрабатывается следующий элемент:
// List: map выполняется полностью, потом filter выполняется полностью (2 промежуточных списка)
listOf(1, 2, 3).map { it * 2 }.filter { it > 2 }
// Sequence: каждый элемент проходит через map И filter перед следующим
listOf(1, 2, 3).asSequence().map { it * 2 }.filter { it > 2 }.toList()
first() останавливают обработку сразу после нахождения результата, избавляя от лишней работыКлючевой компромисс — память против накладных расходов — последовательности сокращают промежуточные аллокации, но имеют небольшие дополнительные затраты на обработку каждого элемента.
Операции со списками создают промежуточные коллекции в памяти на каждом шаге трансформации, в то время как операции с Sequence отлаживают всю обработку до вызова терминальной операции.
Новый — ещё не проверен сообществом
Вы