Я просто тестирую метод разбивки на результат SQL, но каждый раз, когда я пытаюсь добавить данные от c
до b
, b заканчивается пустым, потому что как-то вызывается функция очистки c
до ее добавления в b
, а затем отправляется обратно основного класса. Я думал, что это была ошибка инициализации, но я ее протестировал и обнаружил, что она связана с c.clear()
, поэтому удаление данных позволяет добавить данные до b
, но не очистит c
для следующих 7 или менее пунктов. Почему эта очистка до или как я могу обеспечить ее до конца не до конца?ArrayList называет clear() раньше времени?
(Уточнение: столбцы каждого результирующего набора сохраняются как ArrayList, представляющие одну строку данных. Затем это обернуто вокруг другого массива, представляющего весь набор результатов, который отправляется сюда, чтобы этот метод разбивается на страницы из 7 строк и отправить обратно в HashMap для последующего извлечения.)
Это просто тест, не ищет совершенства здесь
public static void Index(ArrayList<ArrayList<String>> raw, String user) {
ArrayList<ArrayList<ArrayList<String>>> b = new ArrayList<ArrayList<ArrayList<String>>>();
ArrayList<ArrayList<String>> c = new ArrayList<ArrayList<String>>();
int n = 0;
for (ArrayList<String> a : raw) {
if (n < 6 && a.size() > 1) {
c.add(a);
n++;
} else if (a.size() == 1) {
c.add(a);
b.add(c);
c.clear();
} else {
n = 0;
b.add(c);
c.clear();
}
}
n = 0;
Clarify.results.put(user, b);
}
Или другой способ: 'add()' не копирует значение. – Andreas
Спасибо за объяснение моей ошибки. – Creatorsuperman
@ Аndreas лучше подумать о том, что значение является ссылкой на объект, и в этом случае оно копирует только это. –