public static <T> ArrayList<ArrayList<T>> splitList(ArrayList<T> source, int n) {
if (null == source || source.size() == 0 || n <= 0)
return null;
ArrayList<ArrayList<T>> result = new ArrayList<>();
int sourceSize = source.size();
int size;
if (source.size() % n == 0) {
size = source.size() / n;
} else {
size = (source.size() / n) + 1;
}
for (int i = 0; i < size; i++) {
ArrayList<T> subset = new ArrayList<>();
for (int j = i * n; j < (i + 1) * n; j++) {
if (j < sourceSize) {
subset.add(source.get(j));
}
}
result.add(subset);
}
return result;
}