引言:
本文仅为刚毕业时自己写代码遇到何发现这个问题,然后去想的解决办法的一个过程记录。也并非最优解,很高兴评论区的大佬们,能独立思考,给出更优雅的解决办法。但是本文主要是做一个记录,也不准备再修改文章内容了。借鉴着查看吧
昨天开发的时候,遇到了一个排序的问题,于是乎采用java.util包下面的Comparator.comparing来比较。测试的时候发现了空指针异常,于是乎,找到了它的nullsFirst()和nullsLast()两个方法,两个方法的意思就是,为空的时候,就给放到最前面或者最后面。但是,这两个方法并不可行,还是报错。
开启Debug。
nullsFirst()和nullsLast()方法介绍及出错原因
nullsFirst():
此方法返回比较器,其是空型比较,并认为空值小于非空。null首先通过以下逻辑进行操作:
1.null元素被认为小于non-null(即值是null的小于非空的)。
2.当两个元素都为空时,则认为它们相等。
3.当两个元素都不为空时,指定的Comparator确定顺序。
4.如果指定的比较器为null,则返回的比较器将所有非null元素视为相等。
5.如果指定的比较器可序列化,则返回的比较器可序列化。
nullsLast():
方法返回比较器,其是空型比较,并认为比非空更大空值。null首先通过以下逻辑进行操作:
1.null元素被认为大于非null。
2.当两个元素都为空时,则认为它们相等。
3.当两个元素都不为空时,指定的Comparator确定顺序。
4.如果指定的比较器为null,则返回的比较器将所有非null元素视为相等。
5.如果指定的比较器可序列化,则返回的比较器可序列化。
网上说可以 用这两个东西来避免空指针异常。但是事实并不是,在这里点名感谢w哥,大半夜不赔老婆来帮我分析问题。
看源码我们可以发现,compare是有判空两个比较对象都为空的情况,直接返回0,理论上是没有问题的,但是而debug的时候,