'Is there a way to pass a string variable to a for loop in Java?

My requirement is to delete data from a database, but the strings I need to pass to the DELETE query are dynamically generated, so I have to first collect the data and then use it in a for loop that would send the DELETE query multiple times.

My steps so far:

First, I filtered a list so as to collect a list of required elements into a variable. I got the expected output:

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

Output:

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

Now, I want to use each of the elements to send a query to a Neo4j database, using the query - DROP DATABASE <database_name> wait; where <database_name> would be replaced by each of my collected elements. So the queries will look like this:

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

What comes straight to my mind is that a for loop can help me to send the query repeatedly by passing sample1 in the first query, sample2 in the second query...and so on, but my dilemma is that I am lost on how to achieve this.

I tried something like this, but it wont work:

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);
    }

What I was trying to do in the loop is to pass make i = sample1 in the first run, i = sample2 in the second run and so on, but i is an int and I believe only an int can be passed into a condition as far as my little Java knowledge.

How can I pass the String sample1 to the loop in the first run to achieve this - DROP DATABASE sample1 wait; and pass the other elements in subsequent runs? I am open to any other approach than can help me achieve this.



Solution 1:[1]

It does not work because you are not updating the dropDatabase String at any moment in the loop.

You have two options, use a for each or a for i updating the string:

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;");
}

Or if you want the query string apart you could also use a format like this:

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

Solution 2:[2]

Try this:

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 lcx06
Solution 2 Bohemian