我有这堂课:
public class Paint implements Comparable<Paint>{
private String cod_paint;
private String title_paint;
private String author;
private int year;
public Paint(String cod_paint,String title_paint,String author,int year){
this.cod_paint = cod_paint;
this.title_paint = title_paint;
this.author = author;
this.year = year;
}
/* And follow get method */
}
现在我将创建一些对象Paint并将它们插入到集合中,例如ArrayList
我必须在author
之后对此集合进行一次排序,另一次year
再次对cod_paint
进行排序。
要做到这一点,我必须在Paint中实现方法compareTo
例如:
public int compareTo(Paint p){
return cod_paint.compareTo(p.cod_paint);
}
以这种方式,当我在sort
上使用方法ArrayList<Paint>
时,它将按cod_paint
排序。但是现在我怎样才能以相同的方法比较实现其他方式(按作者,按年)?
答案 0 :(得分:10)
请勿使用Comparable
,而是使用自定义Comparator
。我会使用Comparator
s:
public enum PaintComparator implements Comparator<Paint>{
BY_NAME{
@Override
public int compareTo(Paint left, Paint right){
return left.getAuthor().compareTo(right.getAuthor());
}
},
// more similar items here
}
现在使用如下:
List<Paint> myList = // init list here
Collections.sort(myList, PaintComparator.BY_NAME);
见:
Comparator
答案 1 :(得分:2)
如果您需要不同的排序顺序,则可以更轻松地实现多个比较器(Comparator<Paint>
)并将相应的比较器传递给sort()
函数。
这也可以使用匿名类在线完成:
Collections.sort(my_list, new Comparator<Paint>() {
public int compare(Paint o1, Paint o2) { ... }
boolean equals(Object obj) { ... }
});