2013-02-14 107 views
0

我想按降序排列列表对象,并面临classCastException。对象列表降序排列

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.List; 

    class Student implements Comparator<Student>{ 
    private int id; 
     private String name; 

     public Student(int id, String name){ 
    this.id = id; 
    this.name = name; 
} 

public int getId(){ 
    return id; 
} 
public String getName(){ 
    return name; 
} 

} 

public class CollectionSearchDemo { 


public static void main(String[] args) { 

    List<Student> list = new ArrayList<Student>(); 
    list.add(new Student(3, "ouier")); 
    list.add(new Student(2, "fdgds")); 
    list.add(new Student(7, "kiluf")); 
    list.add(new Student(1, "6trfd")); 
    list.add(new Student(8, "hjgas")); 
    list.add(new Student(5, "ewwew")); 

    Collections.sort(list, new Comparator<Student>() { 

     @Override 
     public int compare(Student arg0, Student arg1) { 

      return arg0.getId() - arg1.getId(); 
     } 
    }); 

    Iterator iterator = list.iterator(); 
    while(iterator.hasNext()){ 
     Student student = (Student) iterator.next(); 
     System.out.print(student.getId()+":"+student.getName()+" "); 
    } 

    System.out.println("\nSorting in reverse order:"); 

// Collections.reverse(list); 
    Comparator<Student> collections = Collections.reverseOrder(); 
    Collections.sort(list, collections);  // here getting classCastException. 

    Iterator iterator1 = list.iterator(); 
    while(iterator1.hasNext()){ 
     Student student = (Student) iterator1.next(); 
     System.out.print(student.getId()+":"+student.getName()+" "); 
    } 
} 

} 

想知道几个thigs。 1)有什么区别bet'n Collection.reverse(list) and Comparator collections = Collections.reverseOrder(); Collections.sort(list,collections); 2)为什么我面临classCastException。

+2

你得到一个'ClassCastException'因为'Student'应该实现可比'',不'比较'。 – 2013-02-14 23:22:52

+0

yes.it works.Can你请让我知道更多的描述吗?它会帮助我更好地理解这个概念 – nakul 2013-02-14 23:37:23

+0

'比较器'比较事情。 “比较”可以与其他事物相比较。 – 2013-02-14 23:40:58

回答

4

您需要使用reverse()方法,

reverseOrder()

返回强加实现可比接口的对象collection的自然顺序相反的比较器。

所以ClassCastException