说太多没啥用,直接上代码,会在最后进行讲解!
package chapter9;
import java.util.*;
public class TestSort {
public static void main(String[] args) {
List<Student> list=new ArrayList<>();
list.add(new Student("jack",12));
list.add(new Student("tom",72));
list.add(new Student("marry",22));
list.add(new Student("jiang",82));
list.add(new Student("wang",19));
System.out.println(list.toString());
Student s=Collections.max(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();
}
});
System.out.println(s);
System.out.println("-----------------");
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num=o1.getName().compareTo(o2.getName());
if(num==0){
return o1.getAge()-o2.getAge();
}
return num;
}
});
System.out.println(list.toString());
}
}
class Student{
public Student(String name,int age){
this.age=age;
this.name=name;
}
int age;
String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
看完上面的代码,其实就是对Collections工具类,新建一个Comparator对象,对它的compare方法进行重写;这里有些小伙伴,觉得能不能将compare方法返回值改成Srting类型,通过return o1.getName()-o2.getName()进行操作,很遗憾的是,不可以,因为在原本的方法中就是int类型,具体可以再学一下重写和重载的区别; 第二点,我之所以没有implements Comparator就可以使用重写Comparator的方法,这是JDK1.8的新特性(函数化编程),如果用的之前的版本,就需要实现Comparator。
|