Comparator 接口的使用案例
@Data
public class Test{
//成员变量
private String name;
private Integer age;
private String sex;
//无参构造方法
public Test(){}
//有参构造方法
public Test(String name,Integer age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
}
class Demo14{
//升序排序
//要求传入的参数是Comparator接口,
//要求传入的 对象是Comparator接口实现类对象
public void test(Comparator<Test> com){
//创建一个List集合
List<Test> allStus = new ArrayList<>();
allStus.add(new Test("小哈",10,"男"));
allStus.add(new Test("小花",8,"女"));
allStus.add(new Test("小金",7,"男"));
allStus.add(new Test("小蓝",7,"男"));
allStus.add(new Test("小黄",9,"男"));
//获取当MyList中有效元素的个数
int size = allStus.size();
//排序算法操作不能在原数据数组中进行操作,需要另外准备
//一个用于排序的临时数组,这里涉及到了数据拷贝过程;
Test[] sortTemp = new Test[size];
for(int i = 0; i< sortTemp.length; i++){
//遍历集合并把元素转移到数组中
sortTemp[i] = allStus.get(i);
}
for(int i = 0;i < sortTemp.length-1;i++){
//找出极值
int index = i;
for(int j = i+1; j < sortTemp.length;j++){
//按照成绩升序排序
//使用接口中规定的方法,替换比较规则
if(com.compare(sortTemp[index],sortTemp[j]) > 0){
index = j;
}
}
//交换位置
if(index != i){
Test stu = sortTemp[index];
sortTemp[index] = sortTemp[i];
sortTemp[i] = stu;
}
}
for(int i = 0; i < sortTemp.length; i++){
System.out.println(sortTemp[i]);
}
}
}
//按照成绩升序排序的算法
//这里需要的参数类型是Comparator接口,要求传入的对象是Comparator接口实现类对象
class Demo13 implements Comparator<Test>{
//降序 排序
@Override
public int compare(Test o1, Test o2) {
return o2.getAge() - o1.getAge();
}
}
class Demo15 implements Comparator<Test>{
//升序 排序
@Override
public int compare(Test o1, Test o2) {
return o1.getAge() - o2.getAge();
}
}
如果一个方法的参数是一个接口该怎么处理?
创建他的实现类的对象进行传入
public static void main(String[] args) {
Demo13 demo13 = new Demo13();
//如果一个方法的参数是一个接口该怎么处理???
//创建他的实现类的对象进行传入
test(demo13);
}
public static void test(Comparator<Test> test){
int i = test.compare(new Test("小哈",10,"男"),
new Test("小黄",9,"男"));
System.out.println(i);
}