Comparator接口的三个应用场景

一.对存入数组的Person类按照年龄排序

前提:Person类含有 int类型的属性(比如age)
public class Person(){
	private String name;
	private int age;
}
排序后输出为:
  • “李四”,
  • 20 “王五”,
  • 30 “张三”, 40
Person p1 = new Person("张三",40);
Person p2 = new Person("李四",20);
Person p3 = new Person("王五",30);
Person[] pArr={p1,p2,p3};

第一种:
Arrays.sort(pArr, new Comparator<Person>() {
      @Override
      public int compare(Person o1, Person o2) {
         return o1.getAge() - o2.getAge();
      }
 });
 
第二种:
Arrays.sort(pArr, ((Person o1, Person o2) -> {
      return o2.getAge() - o1.getAge();
 }));
 
第三种:
Arrays.sort(pArr, ((o1, o2) -> o1.getAge() - o2.getAge()))   

二.对map<String,Integer>按value排序

排序后输出形式

java 45
hello 23
c 2
world 1

HashMap<String, Integer> map = new HashMap<>();
map.put("hello", 23);
map.put("world", 1);
map.put("java", 45);
map.put("c", 2);

List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, (o1, o2) -> o2.getValue() - o1.getValue());

三.结合优先队列,构建大顶堆

int[] array = {2,8,5,3,6,9,11,7,2,11,6,9};
//降序排列
//Integer拆箱int
Queue<Integer> max = new PriorityQueue<>((o1, o2) -> o2.intValue()-o1.intValue());

猜你喜欢

转载自blog.csdn.net/tmax52HZ/article/details/107549594