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