例如,有这个代码
final List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
final int chunkSize = 3;
final AtomicInteger counter = new AtomicInteger();
final Collection<List<Integer>> result = numbers.stream()
.collect(Collectors.groupingBy(it -> counter.getAndIncrement() / chunkSize))
.values();
System.out.println(result);
之类的
List<String> originalList = Arrays.asList("1", "2", "3",
"4", "5", "6", "7", "8", "9", "10", "11");
int partitionSize = 3;
List<List<String>> partitions = new LinkedList<>();
for (int i = 0; i < originalList.size(); i += partitionSize) {
int min = Math.min(i + partitionSize, originalList.size());
partitions.add(originalList.subList(i, min ));
}
System.out.println(partitions);
但是它们创建了单独的数组,其中放置了给定数量的元素。
但挑战是以这样一种方式划分数组(数组是 N 长度),您可以将原始数组中的元素数量均匀地放入其中。
比如有一个16个文件的文件数组,你需要把原来的数组拆分成3组,然后从这个数组中把一定数量的文件均匀的复制到这3组中。例如,在第一组中,将有 5 个元素,在第二组 - 5 个元素中,在第 3 组 - 6 个元素中......
File[] files = sourceFolder.listFiles();
File[] filesFirstArr = divideArray(files, ?, ?);
public static File[] divideArray(File[] filesOrigin, int posCopySource , int sizeArrayFiles){
File[] filesPart = new File[sizeArrayFiles];
System.arraycopy(filesOrigin, posCopySource, filesPart, 0, sizeArrayFiles);
return filesPart;
}
该方法将像这样在循环中调用
File[] files = sourceFolder.listFiles();
for(int i = 0; i < sourceFolder.length(); i += partitionSize){
...
}
我不知道如何计算复制元素位置的值(初始,对于每个新的元素组),我不知道如何计算数组的下一个大小,下一组元素)
谁有想法怎么做?
在线演示
更新(基于论坛成员建议的解决方案 - vp_arth )