使用Objects和A primitive String对列表进行排序

时间:2015-08-02 09:52:34

标签: collections comparator

我正在尝试对列表进行排序,如下所示。

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);

1 个答案:

答案 0 :(得分:0)

问题是:

使用dg.add(new String("Ankit"));将列表对象与Dog对象混合在一起列表中是否真的需要字符串对象。

然后你尝试使用你的比较器对它进行排序,你的比较器盲目地将转换值输入到Dog对象。因此,当它遇到你的String对象时,它会尝试将它转换为String对象,这是不可能的(由于Dog不是String的子类),因此你得到ClassCastException。

我会从狗列表中删除String对象来解决问题。