2013-10-10 3 views
4

У меня есть класс, который реализует интерфейс Comparable. В этом классе мне нужно переопределить метод compareTo, чтобы сортировать объекты по значениям Long.Java override compareTo, Long

То, что я не знаю, как выполнить, - это сравнение длинного типа. Я получаю ошибку при попытке проверить, больше ли значение больше или меньше другого значения Long. Я знаю, что Длинный объект длинный, но понятия не имею, как сравнивать двух Лонг.

Пример кода: сообщение

public int compareTo(MyEntry<K, V> object) { 
    if (this.value < object.value) 
     return -1; 
    if (this.value.equals(object.value)) 
     return 0; 

    return 1; 
} 

Ошибка:

  operator < cannot be applied to V,V 
if (this.value < object.value) 
        ^

V, V Лонг, Лонг

+6

Пожалуйста, покажите свою попытку кода и ваше * полное * сообщение об ошибке. –

+8

Существует метод 'compareTo' в' Long' –

+2

@SubirKumarSao С чуть более подробной информацией, это должен быть ответ –

ответ

8

Ваша проблема заключается в том, что MyEntry<K, V> не говорит компилятору, какой тип объекта, который вы пытаетесь сравнить. Он не знает, что вы сравниваете длинные значения. Лучший способ сделать это, чтобы не беспокоиться о том, какой тип объекта вы сравниваете (при условии, что ваш объект реализует Сопоставимые) только с помощью

return this.value.compareTo(object.value); 

, но если вы хотите сделать это вручную, по какой-то причине это сделать :

public int compareTo(MyEntry<K, V> object) { 
    if ((Long) this.value < (Long) object.value) 
     return -1; 
    if (this.value.equals(object.value)) 
     return 0; 

    return 1; 
} 
+0

Это то, что я ищу.Я думал, что тип будет там, так как он добавляется, когда класс был создан. Это работает. Спасибо, выделите! – user1121487

+0

Я бы добавил, что когда вы объявляете свой класс как «реализующий компаратор», вы можете явно указать «реализует Comparable », так что вам не нужно беспокоиться обо всем литье – StormeHawke

+0

, если 'value' является' Long' , почему бы вам просто не передать его в 'Long'' compareTo' (см. ответ Аделя)? –

0

метод использования longValue() для сравнения длинных значений.

например: -

Long id1 = obj.getId(); 
Long id2 = obj1.getId(); 

if (id1.longValue() <= id2.longValue()) { 
Sysout....... 
} 

assertTrue(id1.longValue() == id2.longValue()) 
+0

Autoboxing, начиная с Java 1.5, делает это неуместным – StormeHawke

8
Long l1 = new Long(3); 
Long l2 = new Long(2); 

return l1.compareTo(l2); 

Simple нет?

-1

Возможно, вам поможет длинная команда compareTo. Метод compareTo возвращает целочисленное значение, чтобы дать вам ответ о том, равны ли длинные, больше или меньше друг друга.

Long l1 = new Long(63255); 
Long l2 = new Long(71678); 
int returnVal = l1.compareTo(l2); 

if(returnVal > 0) { 
    System.out.println("l1 is greater than l2"); 
} 
else if(returnVal < 0) { 
    System.out.println("l1 is less than l2"); 
} 
else { 
    System.out.println("l1 is equal to l2"); 
} 
2

это будет выглядеть примерно так:

@Override 
public int compareTo(MyEntry<K, V> object) { 
     if (object == null) { 
      throw new NullPointerException("Null parameter"); 
     } else if (!this.getClass().equals(object.getClass())) { 
      throw new ClassCastException("Possible ClassLoader issue."); 
     } else { 
      return this.longValue.compareTo(object.longValue); 
     } 

} 

совпадению, мы недавно сделали tutorial на сравнениях в Java. Может быть, это может вам помочь.

0

Отдайте длинный длинный, затем используйте метод compareTo для Long.

Java хорошо структурирован, почти все сортируемые классы имеют метод сравнения.

Это хорошая практика Java.

@Override 
       public int compare(long t1, long t2) { 
        return Long.valueOf(t1).compareTo(t2); 
       }