Итерация по списку на основе индекса

У меня есть ArrayList, и я перебираю список для построения запроса, но мой запрос может содержать только 20 000 символов, поэтому я пытаюсь перебрать определенный индекс, чтобы иметь несколько запросов. Как я могу это сделать? Любое руководство было бы полезно.

for(int i=0; i < EntryList.size(); i++){

    String entryValue = (String) EntryList.get(i);

    Query = Query + entryValue;
}

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

stackoverflow.com/questions/12026885/…
shmosel 01.11.2018 21:30

Не связано, но, пожалуйста, изучите соглашения об именах Java и придерживайтесь их. Например, ссылки на объекты должны начинаться с нижнего регистра и записываться в верблюжьем регистре: entryList.

Zephyr 01.11.2018 21:30

Это решение звучит странно. Вы хотите поделиться своей проблемой? Может, есть другой способ решить эту проблему.

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

Ответы 1

Вы можете сделать это, создав отдельный 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

JFed 01.11.2018 22:57

Оба способа оставили последние позиции в списке.

JFed 08.11.2018 23:44

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