如何对对象列表进行排序

use*_*020 2 java collections

假设我有一个Test列表如下:

    public class Test {
    public static enum Unit {
        DAY, WEEK, MONTH, YEAR /* , DAY_TO_DAY */
    }

    private int value;
    private Unit unit;
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
    public Unit getUnit() {
        return unit;
    }
    public void setUnit(Unit unit) {
        this.unit = unit;
    }
}
Run Code Online (Sandbox Code Playgroud)

我将有一个Test列表,其中包含以下值:

3天,5个月,5天,6年,6周,12周,

我们的考试结果如下:

3天,5天,6周,12周,5个月,6年

目前,我创建了如下代码

Collections.sort(tests, new Comparator<Test >() {
  @Override
  public int compare(Test o1, Test o2) {
    if(o1.getValue() > o2.getValue()) return 1;
    if(o1.getValue() < o2.getValue()) return -1;
    return 0;
  }
Run Code Online (Sandbox Code Playgroud)

但是,它只按值而不是按单位排序.上述实现的结果是:

3天,5天,5个月,6周,6年,12周.

请告诉我在这种情况下满足两个条件(单位和值)的方法.谢谢.

chi*_*ity 5

您需要先将其转换为通用格式,然后进行比较.由于天是最小的类型,您应该将您比较的两个实例转换为若干天,然后根据它进行比较.

但你首先要做一些消歧.一个月多久了?它是否超过30天,或更短,或相同?