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

要求: 给一组大集合,按照每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;
}

 

转载于:https://my.oschina.net/u/3183495/blog/1537756

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值