我在尝试对以下列表进行排序时遇到麻烦。
只需使用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))

10-06 12:40