Java List Partition partition(List list, int num)

Here you can find the source of partition(List list, int num)

Description

Partition a list into num sub-lists.

License

Open Source License

Declaration

public static <T> List<List<T>> partition(List<T> list, int num) 

Method Source Code

//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;
    }
}

Related

  1. partition(final List list, final int length)
  2. partition(List list, Integer batchSize)
  3. partition(List all, int partitionSize)
  4. partition(List a, int lower, int upper)
  5. partition(List items, int slices)
  6. partition(List list, int partitionSize)
  7. partition(List list, int size)
  8. partition(List list, int size)
  9. partition(List list, int size)