ListUtils

package com.xx.utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ListUtils {
	/**
	* @Title: averageAssign
	* @Description: 将一个list均分成n个list,主要通过偏移量来实现的
	* @param @param source
	* @param @param n
	* @param @return
	* @return List<List<T>>
	* @throws
	*/
	public static <T> List<List<T>> averageAssign(List<T> source,int n){
		List<List<T>> result=new ArrayList<List<T>>();
		int remaider=source.size()%n;  //(先计算出余数)
		int number=source.size()/n;  //然后是商
		int offset=0;//偏移量
		for(int i=0;i<n;i++){
			List<T> value=null;
			if(remaider>0){
				value=source.subList(i*number+offset, (i+1)*number+offset+1);
				remaider--;
				offset++;
			}else{
				value=source.subList(i*number+offset, (i+1)*number+offset);
			}
			result.add(value);
		}
		
		return result;
	}
	
	/**
	* @Title: splitList
	* @Description: 将一个list切分成多个长度为groupSize的list
	* @param @param list
	* @param @param groupSize
	* @param @return
	* @return List<List<T>>
	* @throws
	*/
	public static <T> List<List<T>> splitList(List<T> list , int groupSize){
		int length = list.size(); 
		// 计算可以分成多少组
		int num = ( length + groupSize - 1 )/groupSize ; 
		// TODO  
		List<List<T>> newList = new ArrayList<>(num); 
		for (int i = 0; i < num; i++) {
			// 开始位置 
			int fromIndex = i * groupSize; 
			// 结束位置 
			int toIndex = (i+1) * groupSize < length ? ( i+1 ) * groupSize : length ; 
			newList.add(list.subList(fromIndex,toIndex)) ; 
		} 
		
		return newList ; 
	}

	/**
	 * 根据list中元素的指定属性进行分组,转为map
	 * @param list
	 * @param groupFieldName 分组的属性名
	 * @param <T>
	 * @return
	 * @throws Exception
	 */
	public static <T> Map<String, List<T>> groupToMap(List<T> list, String groupFieldName) throws Exception {
		Map<String, List<T>> map = new HashMap<>();
		for (T t : list) {
			Field groupField = t.getClass().getDeclaredField(groupFieldName);
			//将该属性设置为可访问
			groupField.setAccessible(true);
			Object fieldValue = groupField.get(t);
			String key = fieldValue.toString();
			List<T> existKeyList = map.get(key);
			if (null == existKeyList) {
				existKeyList = new ArrayList<>();
				map.put(key, existKeyList);
			}
			existKeyList.add(t);
		}
		return map;
	}

	/**
	 * 开始分页
	 * @param list
	 * @param pageNum 页码
	 * @param pageSize 每页多少条数据
	 * @return
	 */
	public static <T> List<T> startPage(List<T> list, Integer pageNum, Integer pageSize) {
		if (list == null) {
			return null;
		}
		if (list.size() == 0) {
			return null;
		}
		if (pageNum == null || pageSize == null) {
			return null;
		}
		Integer count = list.size(); // 记录总数
		Integer pageCount; // 页数
		if (count % pageSize == 0) {
			pageCount = count / pageSize;
		} else {
			pageCount = count / pageSize + 1;
		}

		int fromIndex = 0; // 开始索引
		int toIndex = 0; // 结束索引

		if (!pageNum.equals(pageCount)) {
			fromIndex = (pageNum - 1) * pageSize;
			toIndex = fromIndex + pageSize;
		} else {
			fromIndex = (pageNum - 1) * pageSize;
			toIndex = count;
		}

		List<T> pageList = list.subList(fromIndex, toIndex);

		return pageList;
	}

	@SuppressWarnings("unused")
	public static void main(String[] args) {
		List<Integer> integers=new ArrayList<>();
		integers.add(1);
		integers.add(2);
		integers.add(3);
		integers.add(4);
		integers.add(5);
		List<List<Integer>> lists=averageAssign(integers, 2);
		System.out.println(lists);//[[1, 2, 3], [4, 5]]
		List<List<Integer>> lists2=splitList(integers, 2);
		System.out.println(lists2);//[[1, 2], [3, 4], [5]]
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值