Разбиваем ArrayList на подмассивы в Java: размер 10

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для разбиения ArrayList на несколько подсписков воспользуйтесь методом subList. Внизу представлен пример кода, который разбивает список на подсписки по заданной длине:

Java
Скопировать код
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 согласно желаемому размеру подсписков.

Кинга Идем в IT: пошаговый план для смены профессии

Преобразование подсписков в самостоятельные списки

Если вам требуется, чтобы каждый подсписок был самостоятельным ArrayList, воспользуйтесь следующим кодом:

Java
Скопировать код
List<ArrayList<Integer>> independentLists = choppedLists.stream()
    .map(ArrayList::new)
    .collect(Collectors.toList());

Работа со "остаточными" элементами

Если исходный список не кратен размеру подсписков, следует заботиться о оставшихся элементах:

Java
Скопировать код
int remainder = list.size() % size;
if (remainder != 0) {
    choppedLists.add(new ArrayList<>(list.subList(list.size() – remainder, list.size())));
}

Таким образом, ни один элемент не останется без внимания.

Визуализация

Представьте ArrayList в виде книги с главами:

Markdown
Скопировать код
Книга: [👩‍💼, 👨‍🚒, 🧑‍🏫, 👨‍🌾, 👩‍🚀, 🧑‍🎨, 👨‍💻, 👩‍🔬]

Наша задача – разделить её на короткие рассказы, каждый из которых представлен отдельным ArrayList:

Markdown
Скопировать код
Рассказ 1: [👩‍💼, 👨‍🚒]
Рассказ 2: [🧑‍🏫, 👨‍🌾]
Рассказ 3: [👩‍🚀, 🧑‍🎨]
Рассказ 4: [👨‍💻, 👩‍🔬]

Использование библиотек

Профессиональное разделение списков при помощи Guava

Guava предоставляет возможность выполнить данную задачу очень просто:

Java
Скопировать код
List<List<Integer>> guavaPartitions = Lists.partition(originalList, size);

Эффективное разделение с использованием Apache Commons Collections

Apache Commons Collections также предлагает удобный метод для этого:

Java
Скопировать код
List<List<Integer>> apachePartitions = ListUtils.partition(originalList, size);

Гибкое управление при помощи Java 8 Stream API

Java 8 Streams располагает мощным инструментарием для решения это задачи:

Java
Скопировать код
AtomicInteger index = new AtomicInteger();
Collection<List<Integer>> streamPartitions = originalList.stream()
    .collect(Collectors.groupingBy(it -> index.getAndIncrement() / size))
    .values();

Полезные материалы

  1. Java: Как мне разделить ArrayList на несколько маленьких ArrayList? – Stack Overflow: Форум с разнообразными решениями по разделению списков.
  2. ListUtils (Apache Commons Collections 4.4 API): Информация о методе ListUtils.partition().
  3. Lists (Guava: Google Core Libraries for Java 19.0 API): Описание метода Lists.partition() библиотеки Guava.
  4. Эффективное программирование на Java – Джошуа Блох – Google Книги: Рекомендуемая литература для изучения работы со списками и массивами в Java.
  5. Collections (Java Platform SE 8): Официальная документация Java Collections.