Comparator
- 常用作 Collection 的比较器;
- 比较器 Comparator 是一个接口,一般是以匿名内部类来使用,其中 compare() 方法需要重写;
- 在 java.util 包中,详见:Interface Comparator;
1. compare()
- int compare() 返回值有几种:-1、0 或 1,根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数;
2. 应用
a. 在 Collection 中
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class test {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("rose", 18));
list.add(new Student("jack", 16));
list.add(new Student("abc", 20));
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
for (Student student : list) {
System.out.println(student);
}
}
}
b. 在 TreeSet 中
import java.text.Collator;
import java.util.Comparator;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
Comparator c = Collator.getInstance(java.util.Locale.CHINA);
System.out.print(c.compare("我", "啊") + " ");
System.out.print(c.compare("啊", "我") + " ");
System.out.print(c.compare("啊", "啊") + " ");
TreeSet ts = new TreeSet(c);
ts.add("我");
ts.add("啊");
ts.add("额");
ts.add("中");
System.out.println();
System.out.print(ts);
}
}
- 当然也可以不用 TreeSet 的构造方法,用 Lambda 表达式更改其排列顺序;
import java.text.Collator;
import java.util.Comparator;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
TreeSet ts = new TreeSet((ts1, ts2) -> {
Comparator<Object> c = Collator.getInstance(java.util.Locale.CHINA);
return c.compare(ts1, ts2);
});
ts.add("我");
ts.add("啊");
ts.forEach(System.out::print);
}
}
3. 与 Comparable 的比较