在Java中对我自己类型的arraylist进行排序

我有一个名为Item的Java类型,定义如下:

private Integer itemNo; private String itemName; private String itemDescription; ... 

我希望能够根据itemName按降序对这种类型的arraylist进行排序。

从我读到的,这可以通过以下方式完成:

 Collections.sort(items, Collections.reverseOrder()); 

物品是:

 ArrayList items = new ArrayList(); 

但我发现对Collections.sort的调用给了我一个:

 Item cannot be cast to java.lang.Comparable 

运行时exception。

有人可以建议我需要做什么吗?

将Item声明为Comparable ,并实现comapreTo方法以相反的顺序比较itemName (即比较“ this to this ”,而不是正常的“ this to that ”)。

喜欢这个:

 public class Item implements Comparable { private Integer itemNo; private String itemName; private String itemDescription; public int compareTo(Item o) { return o.itemName.compareTo(itemName); // Note reverse of normal order } // rest of class } 

您需要自定义Item来实现Comparable ,否则您可以使用Comparator执行此操作

你可能应该使Item实现Comparable , 或者为你的Item创建一个Comparator ,并使用Collections.sort(List,Comparator)

代码快照:
比较:

 public static class MyComparator implements Comparator { @Override public int compare(Item o1, Item o2) { //reverse order: o2 is compared to o1, instead of o1 to o2. return o2.getItemName().compareTo(o1.getItemName()); } } 

用法:

  Collections.sort(list,new MyComparator()); 

(*)请注意MyComparator声明中的static关键字是因为我将其实现为内部类,如果将此类实现为外部类,则应删除此关键字

您需要实现Comparable接口并定义compareTo(T o)方法。

也可以看看:

  • 如何使用Comparable Interface

您需要使您的Item类实现java.lang.Comparable接口。

 public class Item implements Comparable { // your code here, including an implementation of the compare method }