01-对象List排序

1、写作背景

总想走捷径的人,往往因找不到捷径而固步自封,一步不前!


2、参考网址


3、学习目的

  • 要考虑线程并发
  • 场景一:单字段排序(根据前端传递的字段进行排序)
    • 在类中写
    • 直接简写
  • 场景二:多字段排序(固定使用前端传递的字段顺序进行排序)

4、核心操作

1)场景一[类写]

场景一:单字段排序(根据前端传递的字段进行排序)

@Override
    public int compareTo(Scene1Model model) {
        Map<String, String> sortMap = Scene1Model.getSortMap().get();
        if (MapUtils.isNotEmpty(sortMap)) {
            String sortField = sortMap.get(AppConstants.ORDER_FIELD);
            String sortType = sortMap.get(AppConstants.ORDER_TYPE);
            int sortIntValue = CompareSortUtil.getSortIntValue(sortType);

            if (StringUtils.equalsIgnoreCase(sortField, AppConstants.ORDER_CLK_NUM) &&
                    this.getClkNum() != model.getClkNum()) {
                return sortIntValue * this.getClkNum().compareTo(model.getClkNum());
            } else if (StringUtils.equalsIgnoreCase(sortField, AppConstants.ORDER_USR_NUM) &&
                    this.getUsrNum() != model.getUsrNum()) {
                return sortIntValue * this.getUsrNum().compareTo(model.getUsrNum());
            } else if (StringUtils.equalsIgnoreCase(sortField, AppConstants.ORDER_USR_ID) &&
                    this.getUsrId() != model.getUsrId()) {
                return sortIntValue * this.getUsrId().compareTo(model.getUsrId());
            }
        }
        return this.getUsrId().compareTo(model.getUsrId());
    }

2)场景一[简写]

场景二:多字段排序(固定使用前端传递的字段顺序进行排序)

List<Scene1SimpleModel> scene1Models = Scene1SimpleTest.initDataList();
    
    Map<String, String> sortMap = new HashMap<>();
    sortMap.put(AppConstants.ORDER_FIELD, AppConstants.ORDER_USR_NUM);
    sortMap.put(AppConstants.ORDER_TYPE, AppConstants.ORDER_TYPE_DESC);
    // 进行排序简写
    Collections.sort(scene1Models, new Comparator<Scene1SimpleModel>() {
        @Override
        public int compare(Scene1SimpleModel o1, Scene1SimpleModel o2) {
            // sortMap直接从上面的参数中传递过
            if (MapUtils.isNotEmpty(sortMap)) {
                String sortField = sortMap.get(AppConstants.ORDER_FIELD);
                String sortType = sortMap.get(AppConstants.ORDER_TYPE);
                int sortIntValue = CompareSortUtil.getSortIntValue(sortType);
    
                if (StringUtils.equalsIgnoreCase(sortField, AppConstants.ORDER_CLK_NUM) &&
                        o1.getClkNum() != o2.getClkNum()) {
                    return sortIntValue * o1.getClkNum().compareTo(o2.getClkNum());
                } else if (StringUtils.equalsIgnoreCase(sortField, AppConstants.ORDER_USR_NUM) &&
                        o1.getUsrNum() != o2.getUsrNum()) {
                    return sortIntValue * o1.getUsrNum().compareTo(o2.getUsrNum());
                } else if (StringUtils.equalsIgnoreCase(sortField, AppConstants.ORDER_USR_ID) &&
                        o1.getUsrId() != o2.getUsrId()) {
                    return sortIntValue * o1.getUsrId().compareTo(o2.getUsrId());
                }
            }
            return o1.getUsrId().compareTo(o2.getUsrId());
        }
    });
    CompareSortUtil.printDataList(scene1Models);

3)场景二

场景二:多字段排序(固定使用前端传递的字段顺序进行排序)

@Override
    public int compareTo(Scene2Model model) {
        Map<String, String> sortMap = Scene2Model.getSortMap().get();
        if (MapUtils.isNotEmpty(sortMap)) {
            String clkNumSort = sortMap.get(AppConstants.ORDER_CLK_NUM);
            String usrNumSort = sortMap.get(AppConstants.ORDER_USR_NUM);
            String usrIdSort = sortMap.get(AppConstants.ORDER_USR_ID);
            if (this.getClkNum() != model.getClkNum()) {
                return CompareSortUtil.getSortIntValue(clkNumSort) * this.getClkNum().compareTo(model.getClkNum());
            } else if (this.getUsrNum() != model.getUsrNum()) {
                return CompareSortUtil.getSortIntValue(usrNumSort) * this.getUsrNum().compareTo(model.getUsrNum());
            } else if (this.getUsrId() != model.getUsrId()) {
                return CompareSortUtil.getSortIntValue(usrIdSort) * this.getUsrId().compareTo(model.getUsrId());
            }
        }
        return this.getUsrId().compareTo(model.getUsrId());
    }

5、课后习题

1)XXXX


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值