Это правильный способ сортировки по названию, положению, а затем по порядку с помощью компаратора? - PullRequest
0 голосов
/ 29 сентября 2010

Рассмотрим этот класс.

public class DynamicField implements Comparable<DynamicField> {
    String title;
    int position;
    int order;

    @Override
    public int compareTo(DynamicField o) {
        if(position < o.position) 
            return -1;
        if(position > o.position)
            return 1;

        if(order < o.order)
            return -1;
        if(order > o.order)
            return 1;

        return title.compareTo(o.title);

    }
}

Правильно ли метод сравнения, если я хочу отсортировать по названию, позиции, а затем по порядку?

Ответы [ 3 ]

1 голос
/ 29 сентября 2010

Нет, вы делаете сравнения в неправильном порядке.Изменение порядка сравнения сделает его работоспособным:

@Override
public int compareTo(DynamicField o) {
    int c = title.compareTo(o.title);
    if (c != 0)
      return c;
    if(position < o.position) 
        return -1;
    if(position > o.position)
        return 1;
    if(order < o.order)
        return -1;
    if(order > o.order)
        return 1;
    return 0;
}
1 голос
/ 29 сентября 2010

нет, попробуйте этот код Обновлено

  public class DynamicField implements Comparable<DynamicField> {
        String title;
        int position;
        int order;

        @Override
        public int compareTo(DynamicField o) {
            int result = title.compareTo(o.title);
            if(result != 0) {}             
            else if(position != o.position)
                result = position-o.position;
            else if(order != o.order)
                result = order- o.order;

            return result;

        }
    }
0 голосов
/ 30 сентября 2010

На самом деле это то же самое, что и ответ @ org.life.java.Возможно, вы найдете это еще более приемлемым.

@Override
public int compareTo() {
    int result = title.compareTo(o.title);
    if (result == 0)
        result = position - o.position;
    if (result == 0)
        result = order - o.order;
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...