public static OptionalInt findColumnIndex(String paramName, List<String> columnNames, List<ColumnNameMatcher> columnNameMatchers, Supplier<String> debugName) {
        OptionalInt result = OptionalInt.empty();

        for (int i = 0; i < columnNames.size(); i++) {
            String columnName = columnNames.get(i);

            for (ColumnNameMatcher strategy : columnNameMatchers) {
                if (strategy.columnNameMatches(columnName, paramName)) {
                    if (result.isPresent()) {
                        throw new IllegalArgumentException(String.format(
                            "'%s' (%s) matches multiple columns: '%s' (%d) and '%s' (%d)",
                            debugName.get(), paramName,
                            columnNames.get(result.getAsInt()), result.getAsInt(),
                            columnNames.get(i), i));
                    }

                    result = OptionalInt.of(i);
                    break;
                }
            }
        }

        return result;
    }
Attempts to find the index of a specified column's mapped parameter in a list of column names

@param paramName          the name of the parameter to search for
@param columnNames        list of column names to search in
@param columnNameMatchers {@link ColumnNameMatcher}s to map {@code paramName} to the column names
@param debugName          name of the parameter to use for debugging purposes (ie: when throwing exceptions)
@return {@link OptionalInt} with the found index, {@link OptionalInt#empty()} otherwise.
core/src/main/java/org/jdbi/v3/core/mapper/reflect/ReflectionMapperUtil.java