首页 > 解决方案 > 对字符串日期进行排序并对其进行排序

问题描述

我想使用按日期(dd/mm/yyyy)对我的文章列表进行排序。日期是字符串。

public class ArticleComparator implements Comparator<Article> {

    @Override
    public int compare(Article a1, Article a2) {
        // TODO Auto-generated method stub
        int result = a1.getDate().compareTo(a2.getDate());
        if(result == 0) 
            result = a1.getAuteur().getPseudo().compareTo(a2.getAuteur().getPseudo());
    return result;
}
public class ReseauSocial {

    private HashMap<String, CompteUtilisateur> utilisateurs; 
    private List <Article> article; 

    public ReseauSocial() {
    }

    public void tirerArticles() {
        Collections.sort(article, new ArticleComparator());
    }

    public void connecter(String pseudo, String mdp) {
    }
}

但是你能帮我把日期从最新到最旧排序吗


感谢您的回答,但它不起作用..这是我修改代码后获得的

public class MainClass {

    static List<Article> articles = new ArrayList<>();

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Article a1 = new Article ("article1", "TP1", true, "01/02/2018");
        Article a2 = new Article ("article2", "TP2", true, "01/02/2019");
        articles.add(a1);
        articles.add(a2);

        ReseauSocial rsc = new ReseauSocial(articles);
        rsc.tirerArticles();

        for(int i = 0; i<articles.size(); i++) {
            System.out.print("Articles : "+ articles.get(i).getDate().toString()+"\n");

        }

    }

}
Article 1 : Fri Feb 01 00:00:00 CET 2019
Articles 2 : Thu Feb 01 00:00:00 CET 2018
Articles : 01/02/2018
Articles : 01/02/2019

标签: javasortingcompare

解决方案


如果您使用已经可比较的数据类型(a classthat implements Comparable),
那么您可以只返回其自己compareTo方法的结果:

public int compare(Article a1, Article a2) {
    // define a suitable formatter
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    // parse both dates
    LocalDate ldOne = LocalDate.parse(a1.getDate(), dtf);
    LocalDate ldTwo = LocalDate.parse(a2.getDate(), dtf);
    // compare the dates and return the result
    return ldOne.compareTo(ldTwo);
}

请注意,使用Strings 表示日期通常不是一个好习惯。考虑重构表示日期的类属性以具有合适的数据类型。


推荐阅读