2014-01-16 2 views
-1

Эй, я хочу, чтобы сравнить свои собственные объекты, так что я могу сортировать их в моей ArrayList, мой объект имеет 3 поля, один из них являются INT моего компаратора код выглядитJava пользовательский компаратор не работает

public class ImageComparator implements Comparator<Obj> { 
    @Override 
    public int compare(Obj 1, Obj 2) { 

     return 1.Id > 2.Id ? 1 : 0; 
    } 
} 

Collections.sort(myList, new ImageComparator()); 

Что я делаю неправильно?

+2

Имена переменных не могут начинаться с цифры. – PeterMmm

+1

Переменные не могут быть такими цифрами. –

+1

Он даже компилируется? AFAIK 1 и 2 не являются юридическими идентификаторами в java – janek

ответ

3

Вы пропустили -1 значение,

попробовать вместо условия стандартного метода, например:

public class ImageComparator implements Comparator<Obj> { 
    @Override 
    public int compare(Obj o1, Obj o2) { 
     return Integer.compare(o1.Id, o2.Id); 
    } 
} 
+0

+1 для 'Integer.compare()'. – dimo414

+0

Лучший ответ, короткий и понятный. –

1

Попробуйте это. Здесь необходимо проверить 3 случая (<, >, =).

public class ImageComparator implements Comparator<Obj> { 
    @Override 
    public int compare(Obj o1, Obj o2) { 

     if (o1.Id > o2.Id) return 1; 
     else if (o1.Id < o2.Id) return -1; 
     else return 0; 

    } 
} 

Collections.sort(myList, new ImageComparator()); 
-1

Вы не можете использовать цифру в качестве первой буквы в variable/method/class names. для более переменных правил присвоения имен Click Here

public class ImageComparator implements Comparator<Obj> { 
    @Override 
    public int compare(obj obj1, obj obj2) { 
     return ((obj)obj1).Id - ((obj)obj2).Id; 
    } 
} 
+0

Он реализует 'Компаратор ', поэтому нет необходимости бросать. –

+0

@JonSkeet, Ok master. забыл об этом. –

0

compare метод компаратор возвращает 1, -1, или 0, если объект 1 больше, меньше или равно объекта 2. Таким образом, вы должны проверить эти 3 и вернуть правильное значение для идентификатора вашего объекта.

public int compare(Obj ob1, Obj obj2){ 
    if(obj1.Id > obj2.Id) 
     return 1; 
    if(obj1.Id < obj2.Id) 
     return -1; 
    return 0; 
} 
0

Сначала вы не можете использовать числа в качестве имен переменных. Затем взгляните на javadocs: return «отрицательное целое число, ноль или положительное целое число, поскольку первый аргумент меньше, равен или больше второго».

-1

Вы можете попробовать:

return v1.Id < v2.Id ? -1 : v1.Id > v2.Id ? 1 : 0; 
+2

Пожалуйста, не делайте этого. Вложение троичного оператора приводит к загадочному коду. –

Смежные вопросы