Java Comparator.nullsLast | 将空元素被认为大于非空元素

  • 使用 Comparator.nullsLast
  • 参考文献

nullsLast是比较器功能接口的静态方法。

Java 8中引入的Comparator.nullsLast方法返回一个对null友好的比较器,认为null大于非null

Java源代码中找到它的声明。

static <T> Comparator<T> nullsLast(Comparator<? super T> comparator)

找到由nullsLast方法返回的比较器的工作原理。
1. 空元素被认为是大于非空元素的。
2. 当两个元素都是空的时候,那么它们被认为是相等的。
3. 当两个元素都是非空的时候,指定的比较器决定了顺序。
4. 如果指定的比较器是空的,那么返回的比较器认为所有非空的元素是相等的。

使用 Comparator.nullsLast

找到使用Comparator.nullsLast方法的例子。

NullsLastDemo.java

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class NullsLastDemo {public static void main(String[] args) {Student s1 = new Student("Ram", 18);Student s2 = new Student("Shyam", 22);Student s3 = new Student("Mohan", 17);System.out.println("-------Case1: One null----------");List<Student> list = Arrays.asList(s1, s2, null, s3);Collections.sort(list, Comparator.nullsLast(Comparator.comparing(Student::getName)));list.forEach(s -> System.out.println(s));System.out.println("--------Case2: More than one null---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsLast(Comparator.comparing(Student::getName)));list.forEach(s -> System.out.println(s));System.out.println("--------Case3: Reverse specified Comparator to nullsLast---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsLast(Comparator.comparing(Student::getName).reversed()));list.forEach(s -> System.out.println(s));System.out.println("--------Case4: Reverse Comparator returned by nullsLast---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsLast(Comparator.comparing(Student::getName)).reversed());list.forEach(s -> System.out.println(s));System.out.println("--------Case5: Specify natural order Comparator to nullsLast---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsLast(Comparator.naturalOrder()));list.forEach(s -> System.out.println(s));System.out.println("--------Case6: Specify null to nullsLast---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsLast(null));list.forEach(s -> System.out.println(s));}
}

Student.java

public class Student implements Comparable<Student> {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic int compareTo(Student o) {return name.compareTo(o.getName());}@Overridepublic String toString() {return name + "-" + age;}
}

输出

-------Case1: One null----------
Mohan-17
Ram-18
Shyam-22
null
--------Case2: More than one null---------
Mohan-17
Ram-18
Shyam-22
null
null
--------Case3: Reverse specified Comparator to nullsLast---------
Shyam-22
Ram-18
Mohan-17
null
null
--------Case4: Reverse Comparator returned by nullsLast---------
null
null
Shyam-22
Ram-18
Mohan-17
--------Case5: Specify natural order Comparator to nullsLast---------
Mohan-17
Ram-18
Shyam-22
null
null
--------Case6: Specify null to nullsLast---------
Ram-18
Shyam-22
Mohan-17
null
null

示例说明

Case-1: 我们的集合中有一个空元素。在排序中,由于nullsLast方法的存在,空元素将排在最后。非空元素的顺序将由传递给nullsLast方法的比较器决定。

Case-2: 我们有一个以上的空元素。我们知道,当两个元素都是空的时候,那么它们被认为是相等的。所以,所有的空元素将被排在最后。非空元素的顺序将由传递给nullsLast方法的比较器决定。

Case-3: 在这种情况下,我们将指定的比较器反转到nullsLast方法。这将只影响非空元素的顺序。所有的空元素将被排在最后。

Case-4: 在这种情况下,我们将nullsLast方法返回的比较器反转。现在,所有的空元素将被排在第一位。

Case-5: 在这种情况下,我们通过比较器来使用元素的自然顺序。对于自然顺序,元素类需要实现Comparable和覆盖compareTo方法。所有的空元素将被排在最后,非空元素将被排在其自然顺序上。

Case-6: 在这种情况下,我们将null传递给nullsLast方法。我们知道,如果指定给nullsLast的比较器是null,那么返回的比较器认为所有非null元素都是相等的。所有的空元素将被排在最后,对非空元素的顺序没有影响。

参考文献

【1】Interface Comparator
【2】Java Comparator.comparing
【3】Java Comparator.nullsLast

【Java 8 新特性】Java Comparator.nullsLast | 将空元素被认为大于非空元素相关推荐

  1. Java 8 新特性:Comparator.naturalOrder | 自然排序

    点击关注公众号,实用技术文章及时了解 来源:moonce.blog.csdn.net/article/ details/120324130 naturalOrder是比较器功能接口的静态方法. Jav ...

  2. 【289期】Java 8 新特性:Comparator.naturalOrder | 自然排序

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... natur ...

  3. Java 8 新特性 宋红康跟学

    Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...

  4. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

  5. java自动化测试语言高级之Java 9 新特性

    java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 2 ...

  6. java自动化测试语言高级之Java 8 新特性

    java自动化测试语言高级之Java 8 新特性 文章目录 java自动化测试语言高级之Java 8 新特性 Java 8 新特性 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 ...

  7. 七、Java 14 新特性

    七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...

  8. 【Java 8 新特性】Java Comparator | 比较器

    Java Comparator | 比较器 比较器功能方法:compare(T o1, T o2) 1. 使用 Lambda 表达式定义 compare 2. 自定义 compare 实现比较器 比较 ...

  9. 【Java 8 新特性】Java Comparator.nullsFirst | 将空元素被认为小于非空元素

    Java Comparator.nullsFirst | 将空元素被认为小于非空元素 使用 Comparator.nullsFirst 参考文献 nullsFirst是比较器功能接口的静态方法. Ja ...

  10. 跟我学 Java 8 新特性之 Stream 流基础体验

    转载自   跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...

最新文章

  1. gitlab合并分支后需要提交吗_阿里前端,如何基于 GitLab 进行「自动化」构建及发布...
  2. mysql数据的引用_MySQL数据库入门:mysql操作和程序引用
  3. java 命名管道_Java中命名管道的并发读/写(在Windows上)
  4. python中thread的setDaemon、join的用法
  5. 事务没提交的数据查的出来吗?_“金三银四”面试官:说说事务的ACID,什么是脏读、幻读?...
  6. 助力 Android 抗衡 iOS,华为发布方舟编译器!
  7. 通过phantomjs 进行页面截图
  8. linux php imagick 扩展安装,linux下为php5.3安装Imagick扩展
  9. Python字符串swapcase()
  10. ijcai2017赛后总结
  11. htc g12 android 4,HTC Desire S G12 刷 官方Android4.0.4
  12. java类图资料整理
  13. 无损音乐刻录成cd有意义吗_这5个强大免费的无损音乐网站,你收藏了吗?
  14. java自动拼图_JAVA编写拼图小游戏带自动寻路算法
  15. 联想家庭版 mysql_联想自带win7家庭版..
  16. 谷歌浏览器 抖动 chrome 上下抖动 问题解决
  17. 计算机磁盘清理软件,清理磁盘空间的7种技巧,电脑装机、安装系统必备
  18. hypermill后处理构造器安装_ug10后处理安装步骤ug后处理在什么位置ug法兰克后处理下载ug后处理器如何设置ug后处理构造器...
  19. 比尔盖茨 鸿蒙系统,华为鸿蒙系统曝光后,比尔盖茨遗憾表示:最大失误是让安卓崛起了...
  20. 常见游戏设计思路及手法

热门文章

  1. django restframework serializer 增加自定义字段
  2. 季冠2022年会 | 我们乘风而去 必将破浪而归
  3. Linux bridge模块的一次重构(让bridge归bridge让eth0归eth0)
  4. RabbitMQ 整合SpringBoot
  5. 计算机本地网络如何共享,本地网络共享如何实现?
  6. win8打印机显示服务器脱机,Win8连接局域网打印机失败解决方法汇总
  7. matlab kappa风险分析,我为什么反对在属性数据MSA中用Kappa分析(上) | 汽车质量管理笔记...
  8. matlab怎么做多元非线性拟合,如何用matlab进行多元非线性拟合
  9. html图片橡皮擦特效,原生制作的js涂鸦画板特效 可调画笔颜色|粗细|橡皮檫功
  10. 恒指2.25日预测及操作建议