我有这门课:
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
订购.但是现在如何在相同的方法 compareTo 中实现另一种排序方式(按作者、按年份)?
最佳答案
不要使用Comparable
,而是使用自定义的Comparator
。我会使用 Comparator
的枚举:
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);
参见:
- Java 教程:Object Ordering
-
Comparator
关于java - 通过不同的方式订购一个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8524266/