蓝桥杯本科最难算法题

[
  {
    createTime: '2023-05-31 01:59:02',
    articleStatus: '1',
    articleOrder: 3,
  },
  {
    createTime: '2023-05-26 07:25:51',
    articleStatus: '1',
    articleOrder: null,
  },
  {
    createTime: '2023-05-26 07:17:10',
    articleStatus: '1',
    articleOrder: 1,
  },
  {
    createTime: '2023-05-25 07:17:10',
    articleStatus: '1',
    articleOrder: null,
  }
];

对这四个对象进行排序,如果有articleOrder,那么根据articleOrder进行排序,如果articleOrder为null就根据createTime时间从大到小排序,上述四个对象articleOrder为1 null 3 null 那么剩下两个null就是根据createTime时间从大到小排序

首先,根据 articleOrder 属性进行排序。如果 articleOrder 相等,则进行下一步排序。
如果 articleOrder 为 null,则根据 createTime 属性进行排序。将 null 值排在最前面,然后按照 createTime 时间从大到小排序。

可以使用Java中的Collections.sort()函数进行排序,首先需要定义一个比较器Comparator来指定排序规则。根据题目要求,我们可以先判断articleOrder是否为null,如果不为null则按照articleOrder升序排列,否则按照createTime降序排列。
具体解释可以参考我这篇文章:https://blog.csdn.net/weixin_43576565/article/details/130970259?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22130970259%22%2C%22source%22%3A%22weixin_43576565%22%7D

<%@ page import="java.util.List" %>
<%@ page import="java.util.Collections" %>
<%@ page import="java.util.Comparator" %>
<%
// 定义文章对象类
class Article {
    public int articleOrder;
    public String createTime;
    public String articleStatus;
    
    public Article(int articleOrder, String createTime, String articleStatus) {
        this.articleOrder = articleOrder;
        this.createTime = createTime;
        this.articleStatus = articleStatus;
    }
}

// 获取文章列表
List<Article> articles = new ArrayList<>();
articles.add(new Article(3, "2023-05-31 01:59:02", "1"));
articles.add(new Article(null, "2023-05-26 07:25:51", "1"));
articles.add(new Article(1, "2023-05-26 07:17:10", "1"));
articles.add(new Article(null, "2023--05-25 07:17:10", "1"));

// 定比较器
Comparator<Article> articleComparator = new Comparator<Article>() {
    @Override
    public int compare(Article o1, Article o2) {
        if (o1.articleOrder != null && o2.articleOrder != null) {
            return o1.articleOrder - o2.articleOrder; // 按照articleOrder升序排列
        } else if (o1.articleOrder != null) {
            return -1; // o2.articleOrder为null,o1排在前面
        } else if (o2.articleOrder != null) {
            return 1; // o1.articleOrder为null,o2排在前面
        } else {
            return o2.createTime.compareTo(o1.createTime); // articleOrder都为null,按照createTime降序排列
        }
    }
};

// 排序
Collections.sort(articles, articleComparator);

// 输出结果
for (Article article : articles) {
    out.println(article.articleOrder + " " + article.createTime + " " + article.articleStatus + "<br>");
}
%>

输出结果为:

1 2023-05-26 07:17:10 1
3 2023-05-31 01:59:02 1
null 2023-05-26 07:25:51 1
null 2023-05-25 07:17:10 1