2015-08-02 2 views
0

Я пытаюсь отсортировать список, указанный ниже.Сортировка списка с объектами и примитивной строкой

List dg = new ArrayList(); 
dg.add(new Dog("one")); 
dg.add(new Dog("two")); 
dg.add(new Dog("three")); 
dg.add(new Dog("four")); 
dg.add(new String("Ankit")); 

Я пытался реализовать сопоставимыми для класса Dog ниже (не уверен, если это полезно здесь)

//Dog class below// 
class Dog implements Comparable<Dog>{ 
String name; 

public Dog(String name) { 

    this.name = name; 
} 

public String getName() { 

    return name; 
} 
public int compareTo(Dog d){ 

    return this.getName().compareTo(d.getName()); 
} 

Проблема, однако, я пишу компаратор, как указано ниже, я получаю ClassCastException. Как это решить?


class StringComparator implements Comparator { 
    public int compare(Object d, Object s) { 
    String p=((Dog)d).getName(); 
    return (p.compareTo(s.toString())); 
    } 
} 

//usage of the above comparator 

Arrays.sort(odog,sc); 
+0

Вы должны добавить свой язык программирования в качестве тега, чтобы его легче находить для других. – Kris

ответ

0

Издание является:

Смотрите, что в списке вы смешиваете объект String, с объектами Dog с помощью dg.add(new String("Ankit")); ли вам действительно нужно строковый объект.

Затем вы пытаетесь сортировать его с помощью компаратора, а ваш компаратор слепо вводит значения литья в объект Dog. Поэтому, когда он сталкивается с вашим объектом String, он пытается ввести приведение его к объекту String, что невозможно (из-за того, что Dog не является подклассом String), и, следовательно, вы получаете ClassCastException.

Я бы удалил объект String из списка Dog, чтобы решить проблему.

+0

Но это желаемое поведение ... Я хочу, чтобы все имена собак и строка сравнивались. –

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