Java11: リストを指定された件数ごとに分割する

2020年5月30日(土)

環境

GitHub repository

java11-split-list

Java11: リストを指定された件数ごとに分割する

/**
 * リストを指定された件数ごとに分割する。
 * 
 * srcListが10,500件のリストの場合、
 * countに2,000を指定すると2,000件のリストが5個、500件のリストが1個の合計6個のリストに分割される。
 * 
 * srcList[10500]
 * splitedList(0)=subList[2000]
 * splitedList(1)=subList[2000]
 * splitedList(2)=subList[2000]
 * splitedList(3)=subList[2000]
 * splitedList(4)=subList[2000]
 * splitedList(5)=subList[500]
 * 
 * @param srcList 分割するリスト
 * @param count 何件ずつ分割するか
 * @return 指定された件数ごとに分割されたリスト
 */
public static <T> List<List<T>> splitList(List<T> srcList, int count) {
    if ((srcList == null) || srcList.isEmpty() || (count <= 0)) {
        return new ArrayList<>();
    }
    List<List<T>> splitedList = new ArrayList<>();

    int itemTotalIndex = 0;
    List<T> subList = new ArrayList<>();

    while (itemTotalIndex < srcList.size()) {
        subList.add(srcList.get(itemTotalIndex++));

        // 分割単位を満たしたsubListをここで回収する。
        if (count <= subList.size()) {
            splitedList.add(subList);
            subList = new ArrayList<>();
        }
    }

    // 分割単位を満たさない端数のsubListをここで回収する。
    if (!subList.isEmpty()) {
        splitedList.add(subList);
    }

    return splitedList;
}