您好我需要任何方法或解释我们如何在java中订购多个列值。 输出应该类似于MySQL中的多列顺序输出。
澄清请查看以下链接 http://www.dynamicdrive.com/forums/showthread.php?19797-ORDER-BY-Multiple-Columns
答案 0 :(得分:1)
您可以使用下面的示例比较器为多个属性排序arraylist。
public class CustomeClass implements Comparator<CustomeObject> {
public int compare(CustomeObject o1, CustomeObject o2) {
int value1 = o1.prop1.compareTo(o2.prop1);
if (value1 == 0) {
int value2 = o1.prop2.compareTo(o2.prop2);
if (value2 == 0) {
return o1.prop3.compareTo(o2.prop3);
} else {
return value2;
}
return value1;
}
}
基本上,只要到目前为止比较的属性相等(== 0),它就会继续比较类的每个连续属性。
答案 1 :(得分:1)
让我们说你的对象看起来像这样:
public DataObject {
public String name;
public int age;
public String hairColour;
}
让我们说你想根据年龄,发色,然后是名字对它们进行排序。您可以按如下方式创建比较器:
public DataObjectComparator extends Comparator<DataObject> {
public int compare(DataObject o1, DataObject o2) {
// if the age is the same
if(o1.age == o2.age) {
// if the hair colour is the same
if(o1.hairColour.compareTo(o2.hairColour) == 0) {
// return the name comparison
return o1.name.compareTo(o2.name);
} else { // else return the hair colour comparison
return o1.hairColour.compareTo(o2.hairColour);
}
} else { // else return the age comparison
return o1 < o2 ? -1 : 1;
}
}
}