Here you can find the source of partition(List
num
sub-lists.
public static <T> List<List<T>> partition(List<T> list, int num)
//package com.java2s; /**//from w ww .j a v a2 s .c o m * Copyright 2014 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.ArrayList; import java.util.List; public class Main { /** * Partition a list into <code>num</code> sub-lists. If the list does * not divide evenly, the extra 'n' elements are split across the * first 'n' lists. There will be no more lists than elements returned (i.e. no empty lists tacked on to the end) */ public static <T> List<List<T>> partition(List<T> list, int num) { if (num < 1) { throw new IllegalArgumentException("Number of sub-lists must be greater than zero"); } List<List<T>> result = new ArrayList<List<T>>(); int index = 0; int listsRemaining = num; int elementsRemaining = list.size(); while (elementsRemaining > 0) { int size = (int) Math.ceil(elementsRemaining / (listsRemaining + 0.0)); List<T> subList = list.subList(index, index + size); result.add(subList); listsRemaining--; elementsRemaining -= size; index += size; } if (elementsRemaining != 0) { throw new IllegalStateException( String.format("Loop exited with %d elements still remaining", elementsRemaining)); } return result; } }