Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/**
 * 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;
    }
}