fix: reuse stream in case of cache
use LinkedList instead of ArrayList