Разбиваем ArrayList на подмассивы в Java: размер 10
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для разбиения ArrayList
на несколько подсписков воспользуйтесь методом subList
. Внизу представлен пример кода, который разбивает список на подсписки по заданной длине:
List<List<Integer>> choppedLists = new ArrayList<>();
int size = 3;
for (int i = 0; i < list.size(); i += size) {
choppedLists.add(new ArrayList<>(list.subList(i, Math.min(list.size(), i + size))));
}
Измените значение size
согласно желаемому размеру подсписков.
Преобразование подсписков в самостоятельные списки
Если вам требуется, чтобы каждый подсписок был самостоятельным ArrayList
, воспользуйтесь следующим кодом:
List<ArrayList<Integer>> independentLists = choppedLists.stream()
.map(ArrayList::new)
.collect(Collectors.toList());
Работа со "остаточными" элементами
Если исходный список не кратен размеру подсписков, следует заботиться о оставшихся элементах:
int remainder = list.size() % size;
if (remainder != 0) {
choppedLists.add(new ArrayList<>(list.subList(list.size() – remainder, list.size())));
}
Таким образом, ни один элемент не останется без внимания.
Визуализация
Представьте ArrayList
в виде книги с главами:
Книга: [👩💼, 👨🚒, 🧑🏫, 👨🌾, 👩🚀, 🧑🎨, 👨💻, 👩🔬]
Наша задача – разделить её на короткие рассказы, каждый из которых представлен отдельным ArrayList
:
Рассказ 1: [👩💼, 👨🚒]
Рассказ 2: [🧑🏫, 👨🌾]
Рассказ 3: [👩🚀, 🧑🎨]
Рассказ 4: [👨💻, 👩🔬]
Использование библиотек
Профессиональное разделение списков при помощи Guava
Guava предоставляет возможность выполнить данную задачу очень просто:
List<List<Integer>> guavaPartitions = Lists.partition(originalList, size);
Эффективное разделение с использованием Apache Commons Collections
Apache Commons Collections также предлагает удобный метод для этого:
List<List<Integer>> apachePartitions = ListUtils.partition(originalList, size);
Гибкое управление при помощи Java 8 Stream API
Java 8 Streams располагает мощным инструментарием для решения это задачи:
AtomicInteger index = new AtomicInteger();
Collection<List<Integer>> streamPartitions = originalList.stream()
.collect(Collectors.groupingBy(it -> index.getAndIncrement() / size))
.values();
Полезные материалы
- Java: Как мне разделить ArrayList на несколько маленьких ArrayList? – Stack Overflow: Форум с разнообразными решениями по разделению списков.
- ListUtils (Apache Commons Collections 4.4 API): Информация о методе
ListUtils.partition()
. - Lists (Guava: Google Core Libraries for Java 19.0 API): Описание метода
Lists.partition()
библиотеки Guava. - Эффективное программирование на Java – Джошуа Блох – Google Книги: Рекомендуемая литература для изучения работы со списками и массивами в Java.
- Collections (Java Platform SE 8): Официальная документация Java Collections.