У меня есть ArrayList, и я перебираю список для построения запроса, но мой запрос может содержать только 20 000 символов, поэтому я пытаюсь перебрать определенный индекс, чтобы иметь несколько запросов. Как я могу это сделать? Любое руководство было бы полезно.
for(int i=0; i < EntryList.size(); i++){
String entryValue = (String) EntryList.get(i);
Query = Query + entryValue;
}
Скажем, в моем списке 500 элементов, я хочу перебирать каждые 100 или 200 элементов, чтобы получить свой запрос.
Не связано, но, пожалуйста, изучите соглашения об именах Java и придерживайтесь их. Например, ссылки на объекты должны начинаться с нижнего регистра и записываться в верблюжьем регистре: entryList.
Это решение звучит странно. Вы хотите поделиться своей проблемой? Может, есть другой способ решить эту проблему.




Вы можете сделать это, создав отдельный List для хранения каждого отдельного запроса, который соответствует вашему пределу длины.
Затем мы просто перебираем ваш список записей и строим каждый запрос. Как только запрос достигнет максимальной длины, добавьте его в queriesList и начните заново создавать новый запрос.
Ваш вопрос не очень ясен в отношении ваших требований или конечной цели, но вот простой MCVE, который можно продемонстрировать.
Он будет строить запросы длиной до 100 символов.
import java.util.ArrayList;
import java.util.List;
class Scratch {
public static void main(String[] args) {
// Create a sample list of entries, with 50 items
List<String> entryList = new ArrayList<>();
for (int i = 0; i < 50; i++) {
entryList.add("Entry" + i);
}
// Create a list to hold our list of queries that are all under the maximum length
List<String> queriesList = new ArrayList<>();
int maxQueryLength = 100;
// Create a new StringBuilder to add our entries to
StringBuilder tempQuery = new StringBuilder();
// Loop through all entries and build a query, up to the max characters
for (String entry : entryList) {
// Check the length of the current query
if (tempQuery.length() + entry.length() > maxQueryLength) {
// Add the tempQuery to our list of queries and start fresh
queriesList.add(tempQuery.toString());
tempQuery.setLength(0);
}
tempQuery.append(entry);
}
// We now have our list of separate queries that we can run individually
for (String query : queriesList) {
System.out.println(query);
}
}
}
Если, однако, вы хотите иметь определенный количество записей в каждом запросе (вместо количества символов в запросе), вы можете сбрасывать StringBuilder после каждых 100-200 элементов:
for (int i = 0; i < entryList.size(); i++) {
// If this iteration is a multiple of 100, start a new query, otherwise just add to it
if ((i + 1) % 100 == 0) { // We add 1 to i here to avoid adding an empty query on the first pass
// Add the tempQuery to our list of queries and start fresh
queriesList.add(tempQuery.toString());
tempQuery.setLength(0);
}
tempQuery.append(entryList.get(i));
}
Спасибо за ваш ответ, я пытаюсь создать запрос для моей целевой системы, чтобы прочитать значение entryList, которое вернет результаты entryList с их значением, мой entryList будет больше 35000, и если я напишу запрос для весь список состоит из более чем минимального количества символов, которое моя целевая система могла бы принять, поэтому пытается создать несколько запросов для набора entryList (например - выберите Value, EntryID из EntryTable, где EntryID = '2030405060' или EntryID = '2030405061' или. .........), я могу сделать это для каждого entryList, но это займет много времени, чтобы пройти через 35000
Оба способа оставили последние позиции в списке.