如何把一个集合分成几个不等的集合

把A集合分给B和C,通过B和C的比例去分配,目前可以拿到B和C的比例并且算出他们应拿多少长度
如何把A集合根据B和C的长度分为新的集合
集合长度不固定、人数不固定、比例不固定
效果如图下

img

img


import java.io.*;
import java.util.*;
class test  
{
    public static void main (String[] args) throws java.lang.Exception
    {
        List<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
        arrayList.add(5);
        arrayList.add(6);
        arrayList.add(7);
        arrayList.add(8);
        arrayList.add(9);
        List<List<Integer>> result = averageAssign(arrayList, Arrays.asList(2, 2, 5));
        System.out.println(result);
    }
    
    public static <T> List<List<T>> averageAssign(List<T> source, List<Integer> group) {
        List<List<T>> result = new ArrayList<List<T>>();
        int count = group.size();
        for (int i = 0; i < count; i++) {
            List<T> value = null;
            value = source.subList(0, group.get(i));
            source = source.subList(group.get(i), source.size());
            result.add(value);
        }
        return result;
    }
}

可以使用list的subList方法来实现。

List<E> subList(int fromIndex, int toIndex); 

返回一个新的list,fromIndex为起始下标(包含),toIndex为结束下标(不包含)
举例代码参考如下:

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(7);
    // 分配比例数组
    Integer[] count = {3, 2, 2};
    Integer index = 0;
    List<List<Integer>> res = new ArrayList<>();
    for (Integer val : count) {
        res.add(list.subList(index, (index += val)));
    }
    System.out.println(res);
}