我有一个自定义实体列表,需要按以下顺序排序: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
方法的帮助。最后我需要按以下顺序获取列表:
- 值(value)一
- 值(value)一
- 值(value)一
- 值二
- 值(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/