packagecom.icil.elsardcservice.untils;importjava.lang.reflect.Method;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Date;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Optional;importjava.util.Set;importjava.util.TreeSet;importjava.util.stream.Collectors;importorg.apache.commons.lang3.StringUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;/*** *************************************************************************
*
* @ClassName: : ListUtil
*
* @Description: :
*
* @Creation Date : 13 May 2019 2:48:52 PM
*
* @Author : Sea
*
*
*
***************************************************************************/@SuppressWarnings("all")public classListUtil{private static Logger LOGGER=LoggerFactory.getLogger(ListUtil.class);/*** 分组依据接口,用于集合分组时,获取分组
* T为要groupBy属性是类型,这个返回值为要groupBy的属性值*/
public interface GroupBy{
T groupBy(Object obj) ;
}/*** 通过属性对集合分组
*@paramcolls
*@paramgb
*@return* extends Comparable*/
public static final Map> groupBy(Collection colls ,GroupBygb){
Map> map = new HashMap>();
Iterator iter =colls.iterator() ;while(iter.hasNext()) {
D d=iter.next() ;
T t=gb.groupBy(d) ;if(map.containsKey(t)) {
map.get(t).add(d) ;
}else{
List list = new ArrayList() ;
list.add(d) ;
map.put(t, list) ;
}
}returnmap ;
}/*** 通过属性名称对集合分组
*@paramcolls
*@paramfieldName为集合中对象的属性名称
*@return* extends Comparable*/
public static final Map> groupBy(Collectioncolls ,String fieldName){return groupBy(colls,new GroupBy(){
@OverridepublicT groupBy(Object obj){
Object v=getFieldValueByName(obj,fieldName);return(T)v;
}
});
}/*** 通过属性对集合分组,并对blank(null 和“ ” )的数据进行合并
*@paramcolls
*@paramgb
*@return* extends Comparable*/
public sta