java - 如何对对象列表进行排序

标签 java collections

假设我有一个测试列表如下:

    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/

相关文章:

java - 从另一个中删除一个 Collection 元素

java - 在 @RequestParam 中绑定(bind)列表包含方括号

java - 为什么 Spring Boot 强制我使用 Thymeleaf 模板

java - 在 Activity 之间传递变量值

java - 这是正确的 WSDL 声明吗?

java - 二进制字符串正则表达式控制位置

Java:从其他类引用对象时找不到符号

java - 集合中的内存消耗

java - Java中如何将int[]转换为List<Integer>?

c++ - 维护对象的有序集合