我在尝试对以下列表进行排序时遇到麻烦。
只需使用Collections.sort(mylist);显示错误,我是Java初学者,无法理解
Myclass x1 = new Myclass("8", "12");
Myclass x2 = new Myclass("6", "9");
Myclass x3 = new Myclass("11", "14");
List<Myclass> mylist = Arrays.asList(x1, x2, x3);
如何对“ mylist”进行排序,使其以以下顺序存储-(6,9),(8,12),(11,14)
即根据元组的第一个值
最佳答案
因为您的对象没有自然顺序(如整数),所以您需要自己使用一个指定比较器机制。
Collections.sort(myList, new Comparator<Myclass>() {
public int compare(Myclass o1, Myclass o2) {
// I don't know how you access the first integer in your 'MyClass'
// replace by your own.
int number1 = o1.getFirstElement();
int number2 = o2.getFirstElement();
if (number1 < number2 ) {
return -1;
} else if (number1 > number2 ) {
return 1;
} else {
return 0;
}
}
});
您总是比较两个对象,因此即使两个对象之间的差异较大,结果也只能为-1 1和0:
比较(6,9)和(8,12)将导致比较器在差为2时返回1
比较(8,12)和(11,14)将导致比较器在差为3时返回1
并且排序操作仍将是正确的。
规则是:
sgn(比较(x,y))= -sgn(比较(y,x))
如果compare(x,y)> 0并比较(y,z)-> compare(x,z)> 0
如果comapre(x,z)= 0-> sgn(比较(x,y))= -sgn(比较(y,x))