java使用Comparator对List进行自定义排序,为null的放到最后

一、问题说明

项目中碰到需要对List中的实体类Student(id,name,age)进行排序,年龄从小到大进行排序,为null的数据排到最后

现在把问题做个简化,List中只存放Integer(表示年龄),然后按以上规则进行排序

比如:

原有数组为[1, null, 5, null, null, 3,  6, null, 4]

经过排序后为[1, 3, 4, 5, 6, null, null, null, null]

二、问题解决

我们只要实现compare方法即可,该方法的参数是需要比较的两个数据(Integer o1,Integer o2)

如果两者都不为null,就直接进行数字比较;其中如果有一个为null,就将null排到后面

public static void main(String[] args) {
	List<Integer> list = new ArrayList<Integer>();
	list.add(1);
	list.add(null);
	list.add(5);
	list.add(null);
	list.add(null);
	list.add(3);
	list.add(6);
	list.add(null);
	list.add(4);
	System.out.println("之前" + list);
	Collections.sort(list, new Comparator<Integer>() {
		@Override
		public int compare(Integer o1, Integer o2) {
			// 写法1:
			if (o1 != null && o2 != null) {
				return o1.compareTo(o2);
			} else {
				return o1 == null ? 1 : -1;
			}
			// 写法2:
			/*return o1 == null ?
					1 :
					(o2 == null ? -1 : o1.compareTo(o2));*/
		}
	});
	System.out.println("之后" + list);
}

参考链接:http://www.itkeyword.com/doc/0528696999367324818/what-to-do-with-null-fields-in-compare

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值