以泛型實現把集合按照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;
}
相關文章
相關標籤/搜索