通过不同的方式订购集合

时间:2011-12-15 17:36:06

标签: java compare

我有这堂课:

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排序。但是现在我怎样才能以相同的方法比较实现其他方式(按作者,按年)?

2 个答案:

答案 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);

见:

答案 1 :(得分:2)

如果您需要不同的排序顺序,则可以更轻松地实现多个比较器(Comparator<Paint>)并将相应的比较器传递给sort()函数。

这也可以使用匿名类在线完成:

Collections.sort(my_list, new Comparator<Paint>() {
  public int compare(Paint o1, Paint o2) { ... }
  boolean equals(Object obj) { ... }
});