/**
* <h2>集合分组工具类</h2>
* <p>
* 输入确定字段,集合信息进行分组匹配<br/>
* 根据对象分组字段,进行集合筛选,组成新的List<br/>
* 以分组字段为key,新集合为value组成新的键值对象
* </p>
* @author ChangCongcong
*/
@Log4j2
public class GroupUtil {
/**
* <h2>集合根据确定字段进行分组</h2>
* 示例:<br/><br/>
* <b>NO.1</b><br/>GroupUtil.groupToMap(T::getMethod(), dataList)<br/><br/>
* <b>NO.2</b><br/>GroupUtil.groupToMap((T)->{ return T.getMethod(); }, dataList);<br/>
* @param group 分组依据
* @param dataList 分组对象
* @return 返回map对象 K:List<T>
* @param <T> 对象类型
* @param <K> 分组依据
*/
public static<T, K> Map<K, List<T>> groupToMap(Group<T, K> group, List<T> dataList){
// 非空判断
if (group==null){
log.error("group参数:分组条件不可以为空");
return null;
}
if (dataList==null){
log.error("list参数:list不可以为null值");
return null;
}
return new HashMap<K, List<T>>(){{
dataList.forEach(data -> computeIfAbsent(group.group(data), newData -> new ArrayList<>()).add(data));
}};
}
public static<T,V> List<List<T>> groupToList(Group<T,V> group,List<T> list){
return new ArrayList<>(groupToMap(group, list).values());
}
public interface Group<T,V>{
V group(T t);
}
使用方法
List<AdminMarketTimeInfo> adminMarketTimeInfos = adminMarketTimeInfoService.list(adminMarketTimeInfoQueryWrapper);
Map<Long, List<AdminMarketTimeInfo>> longListMap = GroupUtil.groupToMap(AdminMarketTimeInfo::getMarketInfoId, adminMarketTimeInfos);