Убедитесь, что я получаю одну запись, используя Случайность

Я пытаюсь сгенерировать случайные столбцы с использованием метода ниже и после создания столбцов, я использую эти столбцы в моем SELECT sql,

final String columnsList = getColumns(table.getColumns());
final String selectSql = "SELECT ID, CREATION_DATE, LAST_MODIFIED_DATE, " + columnsList + "  from " + table.getTableName() + " where id = ?";

/**
 * A simple method to get the column names in the order in which it was
 * inserted
 * 
 * @param columns
 * @return
 */
private String getColumns(final List<String> columns) {
    List<String> copy = new ArrayList<String>(columns);
    Collections.shuffle(copy);

    int rNumber = random.nextInt(columns.size());

    List<String> subList = copy.subList(0, rNumber);
    Collections.sort(subList, new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            return columns.indexOf(o1) < columns.indexOf(o2) ? -1 : 1;
        }
    });
    return StringUtils.join(subList, ",");
}

Постановка задачи:-

Иногда я видел это columnsList значение пусто, и если оно пусто, то selectSql не будет работать, так как будет доп , до from keyword, Как я могу убедиться getColumns должен возвращать по крайней мере одну запись каждый раз.

я верю nextInt будет генерировать случайное число между 0 (inclusively) and n (exclusively), Так что может быть, что иногда будет выбрано 0, любой способ генерировать случайное число между 1(inclusively) and n (exclusively)

1 ответ

Решение

Одним из способов является:

return subList.isEmpty() ? "1" : StringUtils.join(subList, ",");

Но я думаю, что лучше изменить selectSql в

final String selectSql = "SELECT ID, CREATION_DATE, LAST_MODIFIED_DATE " + columnsList + "  from " + table.getTableName() + " where id = ?";

А потом

return subList.isEmpty() ? "" : ","+StringUtils.join(subList, ",");

Если вы хотите по крайней мере одно значение из случайного числа, вы также можете использовать это:

int rNumber = 1+random.nextInt(columns.size()-1);
Другие вопросы по тегам