要求: 给一组大集合,按照每2个一组进行平分
下面是一组数据:
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的Guava工具包中com.google.common.collect这个工具类已经实现了这个功能,但是出于锻炼思维能力自己就在写一个。
1.先把goole的用法展示出来:
Iterable<List<Integer>> partition = Iterables.partition(list1, 2);
System.out.println("GooglesubList=="+partition);
用法很简单,只需要传入对应的集合和按照几个一组的个数就可以返回对应的结果。
2.下面是我自己写的一个工具类,可能时间效率和google大神们没法比,但是也是锻炼自己思维的一种方式吧,传入的参数和google的用法一样。
//实现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;
}