Список объектов сортировки Java в зависимости от порядка значений (например, d, s, a, q, c) - PullRequest
3 голосов
/ 02 февраля 2011

У меня есть массив событий класса, где класс событий похож на

class Events {
Date eventDate;
String eventType;
}

Теперь я хочу сначала отсортировать этот массив на основе новейшей даты события. Если два или более события происходят в одну и ту же дату, я сортирую их в следующем порядке типов событий

1. Maths 2. Science 3. History 4. Algebra.

Так что, если мой список

{ "01/01/2010  History", "01/01/2010 Algebra", "01/01/2010 Maths", "01/01/2010 Science"}

Тогда я хочу отсортировать это как

{ "01/01/2010  Maths", "01/01/2010 Science", "01/01/2010 History", "01/01/2010 Algebra"}

Подскажите, пожалуйста, как мне это сделать?

ТИА, Hanumant.

Ответы [ 4 ]

1 голос
/ 02 февраля 2011

Ваш дизайн оставляет желать лучшего.Попробуйте:

class Event implements Comparable {
    private Date date;
    private Event.Type type;

    enum Type {
        MATHS,     // MATH / MATHEMATICS?
        SCIENCE,
        HISTORY,
        ALGEBRA
    }

    public int compareTo(Event other) {
        int comparison = other.date.compareTo(date);
        if (0 == comparison) {
            comparison = type.compareTo(other.type);
        }
        return comparison;
    }
}

Тогда при Collection<Event> events вы можете просто Collections.sort(events).

1 голос
/ 02 февраля 2011

Не проверено, но оно должно дать вам идею:

class Events
implements Comparable
{
    Date eventDate;
    String eventType;

    int eventScore()
    {
        if (eventType.equals("Maths"))
            return 0;
        else if (eventType.equals("Science"))
            return 1;
        else if (eventType.equals("History"))
            return 2;
        else if (eventType.equals("Alegbra"))
            return 3;
        return 4;
    }

    public int compareTo(Object o)
    {
        Events other = (Events)o;
        if (other.eventDate.before(this.eventDate))
            return -1;
        else if (other.eventDate.after(this.eventDate))
            return 1;
        return other.eventScore() < this.eventScore() ? -1 : 1;
    }
}
1 голос
/ 02 февраля 2011

Вам нужно будет реализовать свой собственный Компаратор , как показано здесь .

0 голосов
/ 02 февраля 2011

Поскольку это звучит как HW, вы должны реализовать Comparable интерфейс для класса Events.

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