Comparator用于Collections.sort

在一个应用管理的代码中遇到这个方法,用于List的排序,升序或者降序

Comparator是接口类,继承之后需要实现里面的方法

static class MyCom implements Comparator<MyData> {

		@Override
		public int compare(MyData o1, MyData o2) {
			int res = 0;
			int data1 = o1.getId();
			int data2 = o2.getId();
			String name1 = o1.getName();
			String name2 = o2.getName();

			res = data1 - data2;

			if (res == 0) {
				res = name2.compareTo(name1);
			}
			return res;
		}

	}

也可以写成
			if (data1 > data2) {
				res = 1;
			} else if (data1 < data2) {
				res = -1;
			}

关于三个返回值:1、-1、0

我理解成o1和o2比较时,根据比较的关系式得到的排放顺序,1表示o1在后面,-1表示o1在前面,0表示按原有顺序

额外的,compareTo是从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值,返回值是int类型。compareToIgnoreCase比较则会不计大小写


实体类

	static class MyData {
		int id;
		String name;

		public MyData(int id, String name) {
			super();
			this.id = id;
			this.name = name;
		}

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		@Override
		public String toString() {
			return "id=" + id + ";" + "name=" + name;
		}

	}

操作代码
	List<MyData> list = new ArrayList<hasda.MyData>();

		MyData data0 = new MyData(1, "a");
		list.add(data0);
		MyData data1 = new MyData(3, "a");
		list.add(data1);
		MyData data2 = new MyData(2, "d");
		list.add(data2);
		MyData data3 = new MyData(1, "z");
		list.add(data3);

		Collections.sort(list, new MyCom());
		System.out.println(list.toString());
	}

结果为[id=1;name=z, id=1;name=a, id=2;name=d, id=3;name=a]

如果将res = data1 - data2;改成res = data2 - data1; 结果为[id=3;name=a, id=2;name=d, id=1;name=z, id=1;name=a]





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值