日期:2014-05-20  浏览次数:20689 次

Java中的comparator 怎么使用Collections.max()求出最大值?
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class testSort {
public static void main(String[] args) {
Student stu1=new Student("zhangsan",18);
Student stu2=new Student("lisi",20);
Student stu3=new Student("wangba",31);
Student stu4=new Student("zhaoliu",17);

List<Student> stu=new ArrayList<Student>();
stu.add(stu1);
stu.add(stu2);
stu.add(stu3);
stu.add(stu4);

System.out.println("原始数据:");
for (Student student : stu) {
System.out.println(student);
}

System.out.println("进行排序......");
ComparatorSort com=new ComparatorSort();
Collections.sort(stu, com);
for (Student student : stu) {
System.out.println(student);
}

Student maxstu=Collections.max(stu);
System.out.println(maxstu);
}
}
这段代码前面排序都好使,就max出错误,说是max括号内的类型不匹配.stu应当继承自一个泛型.那就是Colections.max()无法使用.
那怎么使用Comparator创建对象,再用CollectionS.max进行排序啊?

------解决方案--------------------
Java code
  public static <T extends java/lang/Object & java/lang/Comparable<? super T>> T max(java.util.Collection<? extends T>);
  public static <T extends java/lang/Object> T max(java.util.Collection<? extends T>, java.util.Comparator<? super T>);

------解决方案--------------------
Java code


class StudentComparator implements Comparator<Student> {
    public int compare(Student o1, Student o2) {
    return (o1.age < o2.age ? -1 : (o1.age == o2.age ? 0 : 1));
    }
}

public class testSort {
    public static void main(String[] args) {
    Student stu1 = new Student("zhangsan", 18);
    Student stu2 = new Student("lisi", 20);
    Student stu3 = new Student("wangba", 31);
    Student stu4 = new Student("zhaoliu", 17);

    List<Student> stu = new ArrayList<Student>();
    stu.add(stu1);
    stu.add(stu2);
    stu.add(stu3);
    stu.add(stu4);

    System.out.println("原始数据:");
    for (Student student : stu) {
        System.out.println(student);
    }

    System.out.println("进行排序......");
    StudentComparator studentComparator=new StudentComparator();
    Collections.sort(stu, studentComparator);
    for (Student student : stu) {
        System.out.println(student);
    }

    Student maxstu = Collections.max(stu,studentComparator);
    System.out.println(maxstu);
    }
}