业务-时间排序相关

业务需求说明:

页面上有一个表格,用于展示不同时间段的数据。表格的列有开始时间、结束时间和其他列。对于表格内的数据要求如下:

①根据开始时间进行升序排序,在开始时间相同的情况下根据结束时间进行升序排序。

②每一条数据的时间段不可以重复(从开始时间到结束时间)。

③单条数据的结束时间不可以在开始时间之前。

时间为String类型。

代码如下:

/**
 *
 * 实体类 Time
 * 
 */
public class Time {

    private String startDate;

    private String endDate;

    private String other;

    public String getStartDate() {
        return startDate;
    }

    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }

    public String getEndDate() {
        return endDate;
    }

    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }

    public String getOther() {
        return other;
    }

    public void setOther(String other) {
        this.other = other;
    }
}
public class TimeTable {

    /**
     * 检查列表数据并排序
     *
     * @param list
     * @return
     */
    public List<Time> checkTime(List<Time> list){
        // 判断列表长度
        if ( list.size()> 1 ) {

            //自定义排序规则
            Comparator<Time> comparator = (uts1, uts2) -> {
                if ( uts1.getStartDate() == uts2.getStartDate() &&
                        uts1.getEndDate() == uts2.getEndDate() ){
                    return 0;
                }else{
                    if ( uts1.getStartDate() != uts2.getStartDate() ){
                        return uts1.getStartDate().compareTo(uts2.getStartDate());
                    }else{
                        return uts1.getEndDate().compareTo(uts2.getEndDate());
                    }
                }
            };

            list.sort(comparator);

            // 检查是否有任何不合理的或者重复的数据在list列表
            for (int i = 0; i < list.size(); i++) {
                Time utsInfo = list.get(i);
                // 判断开始时间是否大于结束时间
                if ( utsInfo.getStartDate().compareTo(utsInfo.getEndDate()) > 0 ) {
                    //...抛异常或打印日志
                }

                int j = i + 1;
                if ( j < list.size() ) {
                    Time utsInfo2 = list.get(j);

                    // 检查两个周期之间是否有重叠
                    if ( utsInfo2.getStartDate().compareTo(utsInfo.getEndDate()) <= 0 ) {
                        //...抛异常或打印日志
                    }

                    // 检查是否有重复的时间段
                    if ( comparator.compare(utsInfo,utsInfo2) == 0) {
                        //...抛异常或打印日志
                    }
                }
            }
        }
        return list;
    }

}

MyBatis-Plus是一个增强版的MyBatis框架,它提供了一系列的增强功能,其中包括分页查询。在使用MyBatis-Plus进行分页查询时,可以通过设置排序字段与排序方式来实现时间排序。 假设你有一个名为`User`的实体类,包含一个时间字段`createTime`,你想要按照该字段进行分页查询并按时间倒序排序,可以按照以下步骤操作: 1. 在你的`UserMapper`接口中添加一个方法,用于分页查询并按时间排序: ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; public interface UserMapper extends BaseMapper<User> { Page<User> selectUserByPageAndOrder(Page<User> page, @Param("order") String order); } ``` 2. 在对应的`UserMapper.xml`文件中实现该方法: ```xml <mapper namespace="com.example.mapper.UserMapper"> <!-- ... --> <select id="selectUserByPageAndOrder" resultType="com.example.entity.User"> SELECT * FROM user ORDER BY create_time ${order} </select> </mapper> ``` 3. 在你的业务逻辑中调用该方法进行分页查询,并指定排序方式: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Page<User> getUserByPageAndOrder(int pageNum, int pageSize, String order) { Page<User> page = new Page<>(pageNum, pageSize); return userMapper.selectUserByPageAndOrder(page, order); } } ``` 在调用`getUserByPageAndOrder`方法时,将要查询的页码、每页记录数和排序方式作为参数传入,例如: ```java Page<User> result = userService.getUserByPageAndOrder(1, 10, "DESC"); ``` 以上就是基于MyBatis-Plus进行分页查询并按时间排序的方法。根据你的具体情况,可能需要调整代码中的命名和字段名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值