improve IList#collect