46.Comparator接口

Comparator接口
*强行对某个对象进行整体排序的比较函数
*可以将Comparator传递给sort方法(如 Collections.sort或Arrays.sort)
方法
*int compare(T O1,T O2) 比较用来排序的两个参数。
-如果o1 -如果o1==o2,返回0
-如果o1>o2,返回正整数
*boolean equals(Object odj)指示某个其他对象是否“等于”此
Comparator
此方法可以被Object类中的equals方法覆盖,不必重写。

package com.imooc.sort;

public class Cat {
    private String name;
    private int month;
    private String species;
    public Cat(String name, int month, String species) {
        super();
        this.name = name;
        this.month = month;
        this.species = species;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getMonth() {
        return month;
    }
    public void setMonth(int month) {
        this.month = month;
    }
    public String getSpecies() {
        return species;
    }
    public void setSpecies(String species) {
        this.species = species;
    }
    @Override
    public String toString() {
        return "Cat [name=" + name + ", month=" + month + ", species=" + species + "]";
    }
    

}

package com.imooc.sort;

import java.util.Comparator;

public class NameComparator implements Comparator {

    @Override
    public int compare(Cat o1, Cat o2) {
        // 按名字升序排序
        String name1 = o1.getName();
        String name2 = o2.getName();
        int n = name1.compareTo(name2);//这个返回值与compare的返回值规则是一样的
        //int n = name2.compareTo(name1);//这样就是降序排序
        return n;
    }

}

package com.imooc.sort;

import java.util.Comparator;

public class AgeComparator implements Comparator {

    @Override
    public int compare(Cat o1, Cat o2) {
        //按年龄降序排序
        int age1 = o1.getMonth();
        int age2 = o2.getMonth();
        return age2 - age1;
    }

}

package com.imooc.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CatTest {

    public static void main(String[] args) {
        // 按名字升序排序
        Cat huahua = new Cat("huahua",5,"英国短毛猫");
        Cat fanfan = new Cat("fanfan",2,"中华田园猫");
        Cat maomao = new Cat("maomao",3,"中华田园猫");
        List catList = new ArrayList();
        catList.add(huahua);
        catList.add(fanfan);
        catList.add(maomao);
        System.out.println("按名字排序前:");
        for(Cat cat:catList) {
            System.out.println(cat);
        }
        Collections.sort(catList,new NameComparator());//按照NameComparator里面定义的规则进行排序
        System.out.println("按名字排序后:");
        for(Cat cat:catList) {
            System.out.println(cat);
        }
        //按年龄进行降序排序
        Collections.sort(catList,new AgeComparator());//按照NameComparator里面定义的规则进行排序
        System.out.println("按年龄降序后:");
        for(Cat cat:catList) {
            System.out.println(cat);
        }

    }

}

结果:
按名字排序前:
Cat [name=huahua, month=5, species=英国短毛猫]
Cat [name=fanfan, month=2, species=中华田园猫]
Cat [name=maomao, month=3, species=中华田园猫]
按名字排序后:
Cat [name=fanfan, month=2, species=中华田园猫]
Cat [name=huahua, month=5, species=英国短毛猫]
Cat [name=maomao, month=3, species=中华田园猫]
按年龄降序后:
Cat [name=huahua, month=5, species=英国短毛猫]
Cat [name=maomao, month=3, species=中华田园猫]
Cat [name=fanfan, month=2, species=中华田园猫]

你可能感兴趣的:(46.Comparator接口)