以泛型实现把集合按照n个一组进行平分

要求: 给一组大集合,按照每2个一组进行平分
下面是一组数据:java

List<Integer> list1 = new ArrayList<>();
	list1.add(9);
	list1.add(6);
	list1.add(2);
	list1.add(24);
	list1.add(1);
	list1.add(3);
	list1.add(5);
	list1.add(7);
	list1.add(8);
	list1.add(4);
	list1.add(11);

要完成后的效果:工具

[[9, 6], [2, 24], [1, 3], [5, 7], [8, 4], [11]]google

其实google的Guava工具包中com.google.common.collect这个工具类已经实现了这个功能,可是出于锻炼思惟能力本身就在写一个。code

1.先把goole的用法展现出来:rem

Iterable<List<Integer>> partition = Iterables.partition(list1, 2);  
System.out.println("GooglesubList=="+partition);get

用法很简单,只须要传入对应的集合和按照几个一组的个数就能够返回对应的结果。it

2.下面是我本身写的一个工具类,可能时间效率和google大神们无法比,可是也是锻炼本身思惟的一种方式吧,传入的参数和google的用法同样。io

//实现n等份平分集合
public static <T> List<List<T>> averageAssign(List<T> source, int size) {
	List<List<T>> resultList = new ArrayList<>();
	while (true){
		if (source.size() > size) {
			List<T> subList = source.subList(0, size);
			resultList = resultList(resultList, source, subList);
			source.removeAll(subList); 
		}else{
			List<T> subList = source.subList(0, source.size());
			resultList = resultList(resultList, source, subList);
			break;
		}
	}
	return resultList; 
}
//抽取公共类
@SuppressWarnings("unchecked")
private static <T> List<List<T>> resultList(List<List<T>> resultList, List<T> source, List<T> subList) {
	Object[] array = new Object[subList.size()];
	for (int i = 0; i < subList.size(); i++) {
		array[i] = subList.get(i);
	}
	List<T> asList = (List<T>) Arrays.asList(array);
	resultList.add((List<T>) asList);
	return resultList;
}
相关文章
相关标签/搜索