Вы используете переменную prime
в своей лямбде, которая является ссылкой, которую вы наследуете от включающей области видимости. Когда ваш код оценивает лямбду, он будет использовать любое значение, связанное с этой ссылкой, в области, от которой эта ссылка унаследована. Когда вы не используете tee
и не оцениваете список, все лямбда-функции идентичны и используют одинаковое значение для prime
.
tee
работает, просто сохраняя результаты в списке и передавая их вам из этого списка при повторном запросе позже, поэтому для каждого значения prime
он фактически применяет фильтр ко всем значениям с L
Это можно исправить, связав prime
в области действия lambda
, передав его в качестве аргумента со значением по умолчанию. Это сохраняет это значение как часть функционального объекта, и тогда ссылка prime
является локальной ссылкой на это сохраненное значение.