java List 通过某一属性分组

本文介绍了一个名为GroupUtil的Java工具类,用于根据对象的某个确定字段进行集合的分组操作。该工具类提供了一个静态方法`groupToMap`,接受一个分组依据函数和一个数据列表,返回一个Map,其中键是分组字段的值,值是对应分组内的对象列表。此外,还提供了`groupToList`方法将分组结果转换为List<List<T>>。文章通过示例展示了如何使用这个工具类,并给出了具体的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * <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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值