java - 如何对自定义实体集合进行排序?

标签 java collections

我有一个自定义实体列表,需要按以下顺序排序:valueOne、valueTwo 和 valueThree。

这是我的代码

public class AppRunner {
    public static void main(String[] args) {

        Detail d1 = new Detail("valueOne");
        Detail d2 = new Detail("valueTwo");
        Detail d3 = new Detail("valueFive");
        Detail d4 = new Detail("valueTen");
        Detail d5 = new Detail("valueOne");
        Detail d6 = new Detail("valueOne");

        List<Detail> details = new ArrayList<Detail>(Arrays.asList(d1, d2, d3, d4, d5, d6));

        Collections.sort(details);
        System.out.println(details);
    }
}

我的实体类

public class Detail implements Comparable<Detail> {

    private String value; // there are three options: valueOne, valueTwo, and some other value

    public Detail(String value) {
        this.value = value;
    }

    @Override
    public int compareTo(Detail detail) {
        String val = detail.getValue();
        if (val.equals(this.value) && val.equals("valueOne")) {
            return 1;
        } else if (val.equals(this.value) && val.equals("valueTwo")) {
            return -1;
        } else {
            return 0;
        }
    }
    // getter, setters, toString
}

我认为需要 compareTo 方法的帮助。最后我需要按以下顺序获取列表:

  1. 值(value)一
  2. 值(value)一
  3. 值(value)一
  4. 值二
  5. 值(value)五

最佳答案

使用枚举并比较序数:

enum ValidValues { valueOne, valueTwo, valueThree }

...然后:

public int compareTo(Object detail) {
    return Integer.compare(ValidValues.valueOf(this.value).ordinal(),
                           ValidValues.valueOf(((Detail)detail).value).ordinal());
}

对于大量值,使用集合或映射而不是枚举来执行此操作可能是值得的。

关于java - 如何对自定义实体集合进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454822/

相关文章:

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

java - java集合对象的算术运算

java - HttpServlet 和 JSP 集成

java - Android 按钮在启动线程后不显示

java - Java 中 this.variable 和 variable 的区别

java - 在 Java 中为数组赋值?

用于多时区应用程序的 java 日历、日期和时间管理

python - 如何在 Python 中从用户定义的类创建集合

java - 按每个汉堡的成本降序排序,这是一个带有 Collections.sort 的 ArrayList

java - java中如何将对象集合作为方法的参数传递