Как разделить массив файлов на 4 примерно равных массива?

как разделить массив файлов на 4 примерно равных массива для дальнейшей работы с ними? Можно, как то проще чем у меня сейчас?

File[] files = srcDir.listFiles();

int middle = files.length / 2;

File[] files1 = new File[middle];
System.arraycopy(files, 0, files1, 0, files1.length);

File[] files2 = new File[files.length - middle];
System.arraycopy(files, middle, files1, 0, files2.length);


int middle1 = files1.length / 2;
File[] file1 = new File[middle1];
System.arraycopy(files1, 0, file1, 0, file1.length);

File[] file2 = new File[files1.length - middle1];
System.arraycopy(files1, middle1, file1, 0, file2.length);


int middle2 = files2.length / 2;
File[] file3 = new File[middle2];
System.arraycopy(files2, 0, file3, 0, file3.length);

File[] file4 = new File[file2.length - middle2];
System.arraycopy(files2, middle2, file3, 0, file4.length);

Ответы (1 шт):

Автор решения: ulxanxv

Лучше использовать List<>

List<File> files = Arrays.asList(srcDir.listFiles());

int partitionSize = 2; // сколько файлов будет в каждом листе
List<List<File>> partitions = new ArrayList<>();
for (int i = 0; i < files.size(); i += partitionSize) {
    partitions.add(files.subList(i, Math.min(i + partitionSize, files.size())));
}

То, что у вас сейчас, выглядит очень страшно.

НО если ВАМ так захочется потом создать массивы, то нечто типо такого

File[] files1 = partitions.get(0).toArray(File[]::new);
File[] files2 = partitions.get(1).toArray(File[]::new);
File[] files3 = partitions.get(2).toArray(File[]::new);

Только при создании массивов контролируйте как-нибудь IndexOutOfBoundException

→ Ссылка