假设我有一个测试列表如下:
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;
}
}
我将有一个具有以下值的测试列表:
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;
}
但是,它仅按值排序,而不按单位排序。 上述实现的结果是:
3天、5天、5个月、6周、6年12周。
请告诉我在这种情况下如何满足两个条件(单位和值)。 谢谢。
最佳答案
您需要先转换为通用格式,然后再进行比较。由于天是最小的类型,因此您应该将要比较的两个实例转换为天数,然后据此进行比较。
但是您首先需要做一些消除歧义的工作。一个月有多长?是长于 30 天,还是短于 30 天,还是相同?
关于java - 如何对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590435/