java 自定義類比較器
示例:
package com.myfile;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* Created by tengfei on 2017/10/27
*/
public class CompareTest {
/**
* 内部比較器:Comparable, 重寫conpareTo方法
*/
@SuppressWarnings("rawtypes")
class Student1 implements Comparable {
private String name;
private int age;
public Student1(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "\tStudent1 age: " + age + ", name: " + name + "\r";
}
@Override
public int compareTo(Object o) {
Student1 tmp = (Student1) o;
int result = tmp.age < age ? : (tmp.age == age ? : -);
return result = result == ? (tmp.name.trim().compareTo(name.trim()) < ? : -) : result;
}
}
// -------------------------------------------------------------------------------------
/**
* 外部比較器:Comparator, 定義comparator比較類
*/
class Student2 {
private String name;
private int age;
public Student2(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "\tStudent2 age: " + age + ", name: " + name + "\r";
}
}
@SuppressWarnings("rawtypes")
public static class Student2Comparator implements Comparator {
public int compare(Object o1, Object o2) {
Student2 t1 = (Student2) o1;
Student2 t2 = (Student2) o2;
int result = t1.age > t2.age ? : (t1.age == t2.age ? : -);
return result = result == ? (t1.name.trim().compareTo(t2.name.trim()) > ? : -) : result;
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
CompareTest co = new CompareTest();
List<Student1> list1 = new ArrayList<Student1>();
list1.add(co.new Student1(, "aa"));
list1.add(co.new Student1(, "abb"));
list1.add(co.new Student1(, "acc"));
list1.add(co.new Student1(, "dd"));
Collections.sort(list1); // 内部比較器:要排序的對象實作Comparable接口,可以對自身進行比較
System.out.println(list1);
List<Student2> list2 = new ArrayList<Student2>();
list2.add(co.new Student2(, "aa"));
list2.add(co.new Student2(, "abb"));
list2.add(co.new Student2(, "acc"));
list2.add(co.new Student2(, "dd"));
Collections.sort(list2, new Student2Comparator()); // 外部比較器:通過實作Comparator接口
System.out.println(list2);
}
}
}