您的位置:首页 > 编程语言 > Java开发

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

2017-09-15 00:00 281 查看
摘要: google有一个工具类已经实现了,但是闲暇时自己就模仿的造了一个,或许你的项目以后也会用到。

要求: 给一组大集合,按照每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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java Guava
相关文章推荐