Выборочная сортировка списка по дате - PullRequest
3 голосов
/ 01 июня 2011

Я получил:

List<Comment> list = new ArrayList<Comment>();

Мой класс Комментарий содержит: идентификатор, имя и дату;Я получил некоторую функцию, которая добавляет указанные комментарии, но я бы хотел после этого упорядочить мой список по дате по убыванию.Как это сделать с помощью:

Collections.sort(list, comparator)

?

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

Вы уже знаете, что вам нужно делать.Просто внедрите де Comparator.Это может быть что-то вроде:

Collections.sort(list, new Comparator<Comment>() {
            @Override
            public int compare(Comment o1, Comment o2) {
                return o1.getDate().compareTo(o2.getDate());
            }
        });

(вам может потребоваться проверить наличие нулей)

3 голосов
/ 01 июня 2011

Вам нужно будет реализовать Comparator<Comment>, который реализует метод compare на основе поля даты, и передать этот объект в Collections.sort.

Вот полный пример:

import java.util.*;

class Comment {
    String id, String name;
    Date date;

    public Comment(String id, String name, Date date) {
        this.id = id;
        this.name = name;
        this.date = date;
    }
}


class CommentComparator implements Comparator<Comment> {
    public int compare(Comment o1, Comment o2) {
        return o1.date.compareTo(o2.date);
    }
}


class Test {
    public static void main(String[] args) {
        List<Comment> comments = new ArrayList<Comment>() {{
            long now = System.currentTimeMillis();
            add(new Comment("id1", "second", new Date(now)));
            add(new Comment("id2", "first", new Date(now - 1000)));
            add(new Comment("id3", "third", new Date(now + 1000)));
        }};

        Collections.sort(comments, new CommentComparator());
    }
}
0 голосов
/ 01 июня 2011

Один из вариантов, упомянутых здесь коллегами, заключается в реализации пользовательского компаратора для комментариев. Альтернативный подход заключается в реализации интерфейса Comparable в классе комментариев.

import java.util.*;

class Comment implements Comparable<Comment> {
    private String id, String name;
    private Date date;

    public Comment(String id, String name, Date date) {
        this.id = id;
        this.name = name;
        this.date = date;
    }

    public int compareTo(Comment comment) {
        return date.compareTo(o2.date); //Look Ma! Date is Comparable too!
    }

}


class Test {
    public static void main(String[] args) {
        List<Comment> comments = new ArrayList<Comment>() {{
            long now = System.currentTimeMillis();
            add(new Comment("id1", "second", new Date(now)));
            add(new Comment("id2", "first", new Date(now - 1000)));
            add(new Comment("id3", "third", new Date(now + 1000)));
        }};
        Collections.sort(comments);
    }
}

В моем примере я использовал код @aioobe.

...