more efficient List.collect()