private static List<String> getMapKeys(ResultSetMetaData meta, UnaryOperator<String> caseChange) throws SQLException {
            // important: ordered, not sorted, and unique
            Set<String> names = new LinkedHashSet<>();
            int columnCount = meta.getColumnCount();

            for (int i = 0; i < columnCount; i++) {
                String columnName = meta.getColumnName(i + 1);
                String columnLabel = meta.getColumnLabel(i + 1);

                String key = columnLabel == null ? columnName : columnLabel;
                String renamedKey = caseChange.apply(key);

                boolean added = names.add(renamedKey);
                if (!added) {
                    throw new RuntimeException(String.format("map key \"%s\" (from column \"%s\") appears twice in this resultset!", renamedKey, key));
                }
            }

            return new ArrayList<>(names);
        }
Returns a {@link RowMapper} for a map with the given value type. The key type is {@link String}.

@param valueType A {@link Class} instance representing the value type for the {@link Map}
@param config    A {@link ConfigRegistry} instance
@param <T>       The value type
@return A {@link RowMapper} for a map from string to the given value type
core/src/main/java/org/jdbi/v3/core/mapper/GenericMapMapperFactory.java