Есть ли способ передать строковую переменную в цикл for в Java?

Мое требование состоит в том, чтобы удалить данные из базы данных, но строки, которые мне нужно передать в запрос DELETE, генерируются динамически, поэтому я должен сначала собрать данные, а затем использовать их в цикле for, который будет отправлять запрос DELETE несколько раз.

Мои шаги до сих пор:

Сначала я отфильтровал список, чтобы собрать список необходимых элементов в переменную. Я получил ожидаемый результат:

List<String> newFilter = allProductNames.stream().filter(field -> field.startsWith("sample", 1)).collect(Collectors.toList());
System.out.println(newFilter)

Выход:

"sample1", "sample2", "sample3", "sample4"

Теперь я хочу использовать каждый из элементов для отправки запроса в базу данных Neo4j, используя запрос — DROP DATABASE <database_name> wait;, где <database_name> будет заменен каждым из моих собранных элементов. Таким образом, запросы будут выглядеть так:

DROP DATABASE sample1 wait;
DROP DATABASE sample2 wait;
DROP DATABASE sample3 wait;
DROP DATABASE sample4 wait;
DROP DATABASE sample5 wait;

Что сразу приходит мне на ум, так это то, что цикл for может помочь мне повторно отправить запрос, передав sample1 в первом запросе, sample2 во втором запросе... и так далее, но моя дилемма в том, что я теряюсь в том, как добиться этого.

Я пробовал что-то вроде этого, но это не сработает:

List<String> newFilter = allProductNames.stream().filter(field -> field.startsWith("sample", 1)).collect(Collectors.toList());

    int filterSize = newFilter.size();

    int i = 0;
    String dropDatabase = "DROP DATABASE " + i + " wait;"; //i want to pass the element as a variable here

    for (; i < filterSize ; i++) {

      basePage.queryInputField.sendKeys(dropDatabase);
    }

Что я пытался сделать в цикле, так это передать make i = sample1 при первом прогоне, i = sample2 при втором прогоне и так далее, но i — это int, и я считаю, что только int можно передать в условие, насколько мой маленький Знание Java.

Как я могу передать Stringsample1 в цикл при первом запуске, чтобы добиться этого - DROP DATABASE sample1 wait; и передать другие элементы в последующих запусках? Я открыт для любого другого подхода, который может помочь мне достичь этого.

Почему бы вам не использовать ListIterator? Гораздо проще.

fvu 16.05.2022 19:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуй это:

for (String dbName : newFilter) {
    String dropDatabase = "DROP DATABASE " + dbName + " wait;";
    basePage.queryInputField.sendKeys(dropDatabase);
}
Ответ принят как подходящий

Это не работает, потому что вы не обновляете строку dropDatabase в любой момент цикла.

У вас есть два варианта: используйте a для каждого или a для обновления строки:

for (int i = 0; i < filterSize; i++) {
    basePage.queryInputField.sendKeys("DROP DATABASE " + newFilter.get(i) + " wait;");
}


for (String database : newFilter) {
    basePage.queryInputField.sendKeys("DROP DATABASE " + database + " wait;");
}

Или, если вы хотите разделить строку запроса, вы также можете использовать такой формат:

String format = "DROP DATABASE %s wait;";
for (String database : newFilter) {
    basePage.queryInputField.sendKeys(String.format(format, database));
}

Другие вопросы по теме