在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 }