关于利用stream().collect(Collectors.groupingBy(() -> new TreeMap<>())分组排序的方法,按自己写的排序方法规则排序,将排序规则写成工具类调用。

Map<String, List<ICBmEvaluationTableDTO>> collect = 
tableList.stream().collect(Collectors.groupingBy(ICBmEvaluationTableDTO::getTitleId, 
() -> new TreeMap<>(new TitleIdComparator()), Collectors.toList()));

按ICBmEvaluationTableDTO::getTitleId分组,按new TitleIdComparator()工具类定义的方法排序

工具类:返回正数表示o1大于o2,返回负数表示o1小于o2,返回0表示相等

public class TitleIdComparator implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {
        if (StringUtils.isBlank(o1) || StringUtils.isBlank(o2)){
            return StringUtils.isBlank(o1) ? -1 : 1;
        }
        String[] o1SN = o1.split("\\.");
        String[] o2SN = o2.split("\\.");
        if (o1SN.length != o2SN.length){
            throw new IllegalArgumentException("排序字符串不合法");
        }

        int compare = 0;
        for (int i = 0; i < o1SN.length; i++) {
            compare = Integer.parseInt(o1SN[i]) - Integer.parseInt(o2SN[i]);
            if (compare != 0){
                return compare;
            }
        }
        return compare;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值