Сортировка списка объектов по полю даты в Java

0

Я пробовал много, много (действительно, много) кодов, чтобы упорядочить список объектов по полю даты, пробовать компараторы, лямбда и длинные и т.д....

Ничего из того, что я сделал, не работает, мой список просто не заказывается, и я действительно не знаю, что еще делать, у меня есть поиск здесь много раз и все, что я нашел.

У меня есть список сообщений, у меня есть поле java.util.Date, созданное, эти сообщения имеют отношение "многие ко многим" с объектом, называемым категорией.

Сначала я создал категорию:

Category cat = catCtrl.get(5);

Затем я получаю список сообщений:

List<Post> list = cat.getPostList();

Распечатка списка: (ID + созданный + заголовок)

45 Сб Ноя 25 03:36:06 MST 2017 Donec a libero lacinia
46 Пн Ноя 27 02:46:37 MST 2017 Etiam at bibendum mauris
47 Сб Ноя 25 03:39:17 MST 2017 Cras vel orci nunc
50 Сб Ноя 25 03:37:29 MST 2017 dasdasf

Теперь идея состоит в том, чтобы получить список, упорядоченный по дате создания от последнего до старого:

46 Пн Ноя 27 02:46:37 MST 2017 Etiam at bibendum mauris
47 Сб Ноя 25 03:39:17 MST 2017 Cras vel orci nunc
50 Сб Ноя 25 03:37:29 MST 2017 dasdasf
45 Сб Ноя 25 03:36:06 MST 2017 Donec a libero lacinia

Согласно официальной документации, это должно сделать это:

Collections.sort(list, new Comparator<Post>() {
    public int compare(Post p1, Post p2) {
        return p1.getCreated().compareTo(p2.getCreated());
    }
});

Однако этот код вообще не изменяет порядок.

Что мне не хватает?

Теги:
date
jpa

2 ответа

0

Функция тестирования:

public void test()
{
    Date date1 = DateUtils.convertToDate("2017-11-20");
    Date date2 = DateUtils.convertToDate("2017-11-21");
    Date date3 = DateUtils.convertToDate("2017-11-22");

    Demo demo1 = new Demo(1, date1);
    Demo demo2 = new Demo(2, date2);
    Demo demo3 = new Demo(3, date3);
    List<Demo> demos = new ArrayList<Demo>();
    demos.add(demo1);
    demos.add(demo2);
    demos.add(demo3);

    for(Demo item : demos){
        System.out.println(item.toString());
    }

    Collections.sort(demos, new Comparator<Demo>(){
        public int compare(Demo o1, Demo o2){
            return o2.create.compareTo(o1.create);
        }
    });
    System.out.println("========== ordered =============");
    for(Demo item : demos){
        System.out.println(item.toString());
    }
}

И выход:

1-Mon Nov 20 00:00:00 GMT+08:00 2017
2-Tue Nov 21 00:00:00 GMT+08:00 2017
3-Wed Nov 22 00:00:00 GMT+08:00 2017
========== ordered =============
3-Wed Nov 22 00:00:00 GMT+08:00 2017
2-Tue Nov 21 00:00:00 GMT+08:00 2017
1-Mon Nov 20 00:00:00 GMT+08:00 2017

Существует еще один вопрос, который вы можете использовать в классе java.util.LinkedList для datas этих datas.

Примечание: класс DateUtils - это мое собственное определение.

0

@Poxxac

Используйте ниже код, работал для меня.

package com.java;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;

public class Test {

    public static void main(String[] args) {

        DateFormat df = new SimpleDateFormat("yyyyMMdd");

        Example example1 = new Example();
        example1.setDate(new Date());
        example1.setName("Name1");

        Example example2 = new Example();
        example2.setDate(new Date(System.currentTimeMillis()-48*60*60*1000));
        example2.setName("Name2");

        Example example3 = new Example();
        example3.setDate(new Date(System.currentTimeMillis()-24*60*60*1000));
        example3.setName("Name3");

        Multimap<String, Example> multimap = MultimapBuilder.treeKeys().linkedListValues().build();
        multimap.put(df.format(example1.getDate()), example1);
        multimap.put(df.format(example2.getDate()), example2);
        multimap.put(df.format(example3.getDate()), example3);


        System.out.println(multimap);

    }
}

class Example {

    private String name;

    private Date date;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "Example [name=" + name + ", date=" + date + "]";
    }

}
  • 0
    Я не понимаю, как это помогает ?! Вы создаете отсортированную мультикарту, где ключи являются строковыми значениями. И сейчас?
  • 0
    @AKSW Здесь код Multi Map автоматически сортируется по ключу, как только вы введете в него свои данные. Выполните и проверьте вывод.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню