Comparator 接口实现排序

Comparator 接口实现排序

将此接口的实现传递给 Collections.sorts 方法或者 Arrays.sorts 方法实现排序

返回正数,负数,零分别代表大于,小于,等于

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码 实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构 (如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

单一条件排序

List<Student> stu1 = new ArrayList<Student>(){
    {
        add(new Student("啊三", 15));
        add(new Student("赵武", 16));
        add(new Student("李八", 18));

    }
};
//1.   按照年龄
Collections.sort(stu1, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getAge()-o2.getAge();
        //return o2.getAge()-o1.getAge();
    }
});
//2.   按照姓名字母顺序
Comparator comparator = Collator.getInstance(Locale.CHINA);
Collections.sort(stu1, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        return comparator.compare(o1.getName(), o2.getName());
    }
});
System.out.println(stu1);

使用 lambda 表达式进行简化
允许通过表达式代替接口

Collections.sort(stu1, (s1,s2)->(s1.getAge()-s2.getAge()));
System.out.println(stu1);

多条件排序

List<Student> stu1 = new ArrayList<Student>(){
        {
            add(new Student("一", 17, 1));
            add(new Student("二", 16, 3));
            add(new Student("三", 39, 10));
            add(new Student("四", 52, 12));
            add(new Student("五", 18, 6));
            add(new Student("六", 43, 9));

        }
    };
    Collections.sort(stu1, new Comparator<Student>() {
        @Override
        public int compare(Student o1, Student o2) {
            if(o1.getAge1() == o2.getAge1()){
                return o1.getAge2()-o2.getAge2();
            }else{
                return o1.getAge1()-o1.getAge1();
            }
        }
    });
    for(Student s: stu1){
        System.out.println(s.getName()+"  "+s.getAge1()+"  "+s.getAge2());
    }

自定义条件排序

		String[] order = {"语文","数学","英语","物理","化学","生物","政治","历史","地理","总分"};
		final List<String> definedOrder = Arrays.asList(order);
		List<String> list = new ArrayList<String>(){
			{
				add("总分");
				add("英语");
				add("政治");
				add("总分");
				add("数学");
			}
		};
		Collections.sort(list,new Comparator<String>() {
		@Override
		public int compare(String o1, String o2) {
			int io1 = definedOrder .indexOf(o1);
			int io2 = definedOrder .indexOf(o2);
			return io1-io2;
		}
	});
	
	for(String s:list){
		System.out.print(s+"   ");
	}

来自于

posted @ 2021-03-03 16:53  LianLianzhao  阅读(195)  评论(0)    收藏  举报