Вариант 1 будет просто создать новый массив для каждого элемента в массиве, который у вас есть ... можно сделать в общем случае так:
public <T> List<T[]> splitEachItemIntoOwnArray(T[] original) {
List<T[]> result = new ArrayList<T[]>();
if (original == null) return result;
for (T t : original) {
result.add((T[])new Object[] {t});
}
return result;
}
Вариант 2, вы также можете достичь этого с помощьюметод Arrays.copyOfRange ():
public <T> List<T[]> splitEachItemIntoOwnArray2(T[] original) {
List<T[]> result = new ArrayList<T[]>();
if (original == null) return result;
for (int i = 0; i < original.length; i++) {
result.add(Arrays.copyOfRange(original,i,i+1));
}
return result;
}
Параметры 1 и 2 работают, если вы всегда хотите, чтобы каждый элемент исходного массива разделялся на собственный массив.Если вы хотите, чтобы все N элементов исходного массива были разделены на свои, это должно работать:
public <T> List<T[]> splitEachItemIntoOwnArray2(T[] original, int size) {
List<T[]> result = new ArrayList<T[]>();
if (original == null) return result;
int curPos = 0;
while (curPos < original.length) {
int remaining = original.length - curPos+1;
if (remaining <= size) {
result.add(Arrays.copyOfRange(original,curPos,original.length));
} else {
result.add(Arrays.copyOfRange(original,curPos,curPos+size));
}
curPos += size;
}
return result;
}