/** * Split <code>elements</code> evenly into separate lists divided up <code>howManyWays</code> */ public static final <T> List<List<T>> splitEvenly(List<T> elements, int howManyWays) { // Can't split 2 things 3 ways if (howManyWays > elements.size()) { howManyWays = elements.size(); } int[] lengths = getDivideEvenly(elements.size(), howManyWays); int offset = 0; List<List<T>> listOfLists = new ArrayList<List<T>>(); for (int i = 0; i < lengths.length; i++) { int length = lengths[i]; List<T> sublist = new ArrayList<T>(); for (int j = offset; j < offset + length; j++) { sublist.add(elements.get(j)); } listOfLists.add(sublist); offset += length; } return listOfLists; }