0

エラー Exception in thread "main" java.lang.ClassCastException : com.genous.Employee cannot be cast to java.lang.Comparable が発生します

java.util.Arrays.mergeSort (Arrays.java:1157) で

java.util.Arrays.sort(Arrays.java:1092) で

java.util.Collections.sort(Collections.java:134) で

com.genious.Employee.main(Employee.java:54)で//

public class Employee implements Comparator
{
String firstname;
String lastname;
int mobileno;
public Employee(String firstname,String lastname,int mobileno)
{
this.firstname=firstname;
this.lastname=lastname;
this.mobileno=mobileno;
}

@Override
public String toString() {
        return firstname;
}


@Override
public int compare(Object o1, Object o2) {
Employee e2=(Employee)o1;
Employee e3=(Employee)o2;
int i=e2.firstname.compareTo(e3.firstname);
if(i!=0)
    return i;

return i;
}


/**
 * @param args
 */
public static void main(String[] args) {
ArrayList list=new ArrayList();
    Employee e=new Employee("anand","pandey",93456666);
    Employee e1=new Employee("sheel","nidhi",678956344);
    Employee e5=new Employee("shumit", "Kumar", 97390267);
    Employee e6=new Employee("Kamal", "Kumar", 97390267);
    list.add(e);
    list.add(e1);
    list.add(e5);
    list.add(e6);
    System.out.println(list);
Collections.sort(list);
    System.out.println(list);
}



}
4

2 に答える 2

4

従業員クラスのメソッドをオーバーライドしequals()、リストの代わりにすべての従業員オブジェクトをセットに追加すると、一意の従業員オブジェクトのリストが取得されます。また、重複するエントリの数が必要な場合は、リスト サイズから set size() を減算できます。 ()

          //Provided you have overriden the equals() method
          List<Employee> employeeList = new ArrayList<Employee>();
          Set<Employee> employeeSet = new HashSet<Employee>(employeeList);

          int dupEntries = employeeList.size() - employeeSet.size();
          System.out.println("Dup Entries : "+dupEntries);
于 2013-07-25T13:27:59.903 に答える
3

Comparable インターフェースを実装する

public class Empl implemnents Comparable{
  public int compareTo(Empl  o){
    if(.... your check if duplicate ....) 
      return 0;
    return -1;
  };
}

そしてこれを試してください

ArrayList<Empl> yourlist = ...;
TreeSet ts = new TreeSet();
ts.addAll(yourlist);
yourlist.removeAll(ts);

あなたのリストにはすべての重複があります。オーバーライドするequals()ことは、私にとって低レベルで不快です。

于 2013-07-25T13:28:43.717 に答える