0

这是我的带有排序方法的测试类:

public class Main {
    public static void main(final String[] args) {
        ArrayList<Person> people = new ArrayList<Person>();

        Person person1 = new Person("Jonas", 36);
        Person person2 = new Person("Petras", 16);

        people.add(person1);
        people.add(person2);

        ArrayList<Integer> ints = new ArrayList<Integer>();
        ints.add(6);
        ints.add(5);

        ints = Main.sortAscending(ints);

        System.out.println(ints);
    }

    public static <T extends Comparable<? super T>> ArrayList<T> sortAscending(
            final ArrayList<T> list) {
        Collections.sort(list);
        return list;
    }
}

只要我传入原始类型列表,它就可以正常工作:字符串、整数等。但是,当我尝试传入我的对象列表时,它不起作用。

这是我的课:

public class Person {
    final String name;
    final int age;

    public Person(final String name, final int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return String.format("{name=%s, age=%d}", name, age);
    }
}

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(final Person person1, final Person person2) {
        return person1.age < person2.age ? -1 : person1.age == person2.age ? 0 : 1;
    }
}
  1. 如何使我的方法 sortAscending 与我的班级一起工作?
  2. 如何抛出我传入的对象没有实现比较方法的异常?
4

2 回答 2

2

将比较器的实例发送到sort()

Collections.sort(list, new AgeComparator());

于 2013-10-20T17:54:14.107 回答
1

要使用Main.sortAscending您需要在您的 Person 类上实现 Comparable 接口并实现 compareTo 方法

public class Person implements Comparable<Person> {
   @Override
   public int compareTo(Person arg0) {
       //your code here to compare object
   }
}

另一种选择是使用该sort()方法并传递您Comparator的信息。

于 2013-10-20T17:54:41.443 回答