【问题标题】:Sorting a list with Objects and A primitive String使用对象和原始字符串对列表进行排序
【发布时间】:2015-08-02 09:52:33
【问题描述】:

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

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

【问题讨论】:

  • 您应该将您的编程语言添加为标签,以便其他人更容易找到。

标签: collections comparator


【解决方案1】:

问题是:

看到你正在使用dg.add(new String("Ankit"));将字符串对象与Dog对象混合到一个列表中你真的需要字符串对象吗?

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

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

【讨论】:

  • 但这是我们想要的行为......我想要比较所有狗的名字和一个字符串......
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 2021-06-10
相关资源
最近更新 更多