Are both of these fields necessary? I think that if `transformedColumnNamesByIndex` were a `SortedMap`, `transformedColumnNames` could be eliminated and `getColumnNames` could `collect` the values of `transformedColumnNamesByIndex`.