天天看點

java 自定義類比較器

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);
        }
    }
}