private static <T> Column<T, ?> convertToColumn(final Method method) {
        final String columnName = convertToColumnName(method.getName());

        final ColumnBuilder<T, ?> columnBuilder = Column.builder(columnName, row -> {
            try {
                return method.invoke(row);
            } catch (IllegalAccessException | InvocationTargetException e) {
                throw new RuntimeException(e);
            }
        });
        if (Number.class.isAssignableFrom(method.getReturnType())) {
            columnBuilder.rightAligned();
        }
        return columnBuilder.build();
    }
Attempts to determine the structure of the table from the public getters
of the collection items. The column names are derived from the method name,
e.g. getFirstNameLength() becomes "First Name Length".
Sub-classes of {@link Number} are right aligned.

@param sortColumns If true columns will be in order of column name, else they will
                   be in no particular order.
@return A {@link String} containing the markdown style table.
stroom-util/src/main/java/stroom/util/logging/AsciiTable.java