java - 通过不同的方式订购一个系列

标签 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 订购.但是现在如何在相同的方法 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 - 通过不同的方式订购一个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8524266/

相关文章:

java - 在 Canvas 上画一条弯曲的路径?

java - 通过maven在tomcat中运行后如何启动我的webapp

c++ - 为什么 '==' 在 std::string 上很慢?

java - 在 Java 中,我应该使用什么来实现首先返回最大元素的 PriorityQueue?

java - Spring boot 安全配置 - 必须指定 authenticationManager

java - 我怎样才能避免 java.lang.NullPointerException 错误

javascript - 如何在javascript中比较两个不同的图像

PHP/MySQL - 比较 2 个不同数据库中的表

java - 确定可以容纳字符串值的最小浮点类型

C++ 将字符串与单词进行比较