сортировать строковую дату и сортировать ее - PullRequest
0 голосов
/ 31 мая 2019

Я хотел бы использовать сортировку моего списка статей по дате (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

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Если вы используете уже сопоставимый тип данных (class, 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);
}

Обратите внимание, что использование String s для дат обычно не является хорошей практикой. Рассмотрите возможность рефакторинга атрибутов вашего класса, представляющих даты, чтобы получить подходящий тип данных.

0 голосов
/ 31 мая 2019

Сначала нужно разобрать дату

public int compare(Article a1, Article a2) {
   SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
   Date date1 = sdf.parse(a1.getDate());
   Date date2 = sdf.parse(a2.getDate());

   int result = date1.compareTo(date2);
   if(result == 0) { 
      result = a1.getAuteur().getPseudo().compareTo(a2.getAuteur().getPseudo());
   }

   return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...