java_Comparator(比较器对象重写(java.util.Comparator)例程(配合java.util.Collections类中的sort方法))

package study.collections;
/*使用java.util.Comparator的一个好处是不需要让被排序对象的类额外的implements java.lang public 接口 Comparable<T>,即还需要在对象类中实现Comparable接口中的compareTo()方法.这对应于comparator接口中的compare()方法的重写;
* 当然,使用Comparator也得implements java.util @FunctionalInterface public 接口 Comparator<T>,一般加载public class下
* 当然还可以用lambada表达式改进匿名函数的写法,是十分简练的
*配合博客理解: https://blog.csdn.net/xuchaoxin1375/article/details/109536666*/
/*通过实现comparable<>中的compareTo方法,在调用Collections.sort()方法只需要传入lst这一个待被排序的集合即可(这也是在没有实现comparator接口的比较器对象时默认调用的方法(comparable<>中的comparaTo方法)*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ComparatorExample {
public static void main(String[] args) {
ArrayList<Integer> lst = new ArrayList<>();
lst.add(1);
lst.add(8);
lst.add(-2);
lst.add(5);
System.out.println(lst);
/*Comparator<>接口中的compare()也是一个泛型抽象方法(声明):public interface Comparator<T>{..;int compare(T o1, T o2); boolean equals(Object obj);(共两个抽象方法)另一个抽象法实现估计是Object根类中已经有了这么一个equals()方法的实现了;当然如果是其他obecet只中不具有的,那还是的全部亲自重写..}*/
Collections.sort(lst, new Comparator<Integer>() {
//重写比较规则
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
System.out.println("降序排类结果:"+lst);
ArrayList<Star> lst2 = new ArrayList<>();
lst2.add(new Star("llj", 28));
lst2.add(new Star("zzd", 24));
lst2.add(new Star("zwz", 24));
/*lst2.add(new Star("成龙", 45));
lst2.add(new Star("杨丽青", 24));*/
lst2.add(new Star("ylq", 25));
lst2.add(new Star("cl", 20));
System.out.println(lst2);
Collections.sort(lst2, new Comparator<Star>() {
@Override
public int compare(Star o1, Star o2) {
//按年龄降序排序
int result = o2.getAge() - o1.getAge();
//如果年龄相同,再用姓名的第一个字升序排列
/*java.lang.String @Contract(pure = true)
public char charAt(@Range(from = 0, to = Integer.MAX_VALUE) int index)
Returns the char value at the specified index. An index ranges from 0 to length() - 1.
The first char value of the sequence is at index 0, the next at index 1, and so on, as for array indexing.*/
if (result == 0) {
result = o1.getName().charAt(0) -
o2.getName().charAt(0);
}
return result;
}
}
);
System.out.println("指定排序规则:年龄降序+姓名首字符升序结果:"+lst2);
}
}
class Star {
private String name;
private int age;
public Star(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "{"+ "age="+age+ " name=" + name+"}" ;
}
}
posted @   xuchaoxin1375  阅读(24)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-07-15 EM@不等式的基本性质
2022-07-15 math_排序不等式的推导
点击右上角即可分享
微信分享提示