List 自定义顺序多级排序

本文介绍了一种针对活动列表的智能排序算法,该算法通过四个级别的排序策略,实现了活动按类型、审核状态、时间状态及创建时间的综合排序。首先确保特定类型的活动优先展示,然后依据审核状态进行排序,接着根据活动的当前时间状态(未开始、进行中、已结束)进行排序,最后按创建时间倒序排列,确保了活动列表的合理性和时效性。

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

    /***
     *  活动list排序
     *  一级排序 版块推广按类型排在最前面 顺序
     *  二级排序 审核失败 2,审核中0,审核成功1 顺序排序
     *  三级排序 以活动未开始 当前时间小于开始时间,进行中 当前时间大于等于开始时间AND当前时间小于等于结束时间,已结束 当前时间大于结束时间, 顺序排序
     *  四级排序 以活动创建时间倒序排序
     *
     * @param generalizeList 活动list
     * @author dongwei.
     * @date 2018/12/06.
     */
    private List<Generalize> activitySortList(List<Generalize> generalizeList) {
        List<Integer> checkList = new ArrayList<>();
        checkList.add(2);
        checkList.add(0);
        checkList.add(1);
        List<Integer> categoryList = new ArrayList<>();
        categoryList.add(GeneralizeEnum.APPLET_INDEX.getKey());
        categoryList.add(GeneralizeEnum.DINE_PLATE.getKey());
        categoryList.add(GeneralizeEnum.TAKEOUT_PLATE.getKey());
        categoryList.add(GeneralizeEnum.QUEUE_PLATE.getKey());
        // 以 审核失败 2,审核中0,审核成功1 排序
        generalizeList.sort((o1, o2) -> {
            if (categoryList.contains(o1.getActivityCategory()) && categoryList.contains(o2.getActivityCategory())) {
                return o1.getActivityCategory() - (o2.getActivityCategory());
            } else {
                int io1 = checkList.indexOf(o1.getIsCheck());
                int io2 = checkList.indexOf(o2.getIsCheck());
                if (io1 != io2) {
                    return io1 - io2;
                } else {
                    Integer flag1 = 0;
                    Integer flag2 = 0;
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                    String format = sdf.format(new Date());
                    // 以未开始,进行中,已结束顺序排序
                    Date date = DateUtil.StringToDate(format, DateStyle.YYYY_MM_DD_HH_MM);
                    flag1 = getFlag(o1, flag1, date);
                    flag2 = getFlag(o2, flag2, date);
                    if (flag1.equals(flag2)) {
                        //对创建时间倒序排序
                        return o2.getCreatedDate().compareTo(o1.getCreatedDate());
                    } else {
                        return flag1 - flag2;
                    }
                }
            }
        });
        return generalizeList;
    }

    private Integer getFlag(Generalize o2, Integer flag2, Date date) {
        if (0 < o2.getStartTime().compareTo(date)) {
            flag2 = 0;
        } else if (0 <= o2.getStartTime().compareTo(date) && 0 >= o2.getEndTime().compareTo(date)) {
            flag2 = 1;
        } else if (0 > o2.getEndTime().compareTo(date)) {
            flag2 = 2;
        }
        return flag2;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值