【Java 8 新特性】Java Comparator.nullsLast | 将空元素被认为大于非空元素
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 | 将空元素被认为大于非空元素相关推荐
- Java 8 新特性:Comparator.naturalOrder | 自然排序
点击关注公众号,实用技术文章及时了解 来源:moonce.blog.csdn.net/article/ details/120324130 naturalOrder是比较器功能接口的静态方法. Jav ...
- 【289期】Java 8 新特性:Comparator.naturalOrder | 自然排序
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... natur ...
- Java 8 新特性 宋红康跟学
Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...
- Java 10新特性
Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...
- java自动化测试语言高级之Java 9 新特性
java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 2 ...
- java自动化测试语言高级之Java 8 新特性
java自动化测试语言高级之Java 8 新特性 文章目录 java自动化测试语言高级之Java 8 新特性 Java 8 新特性 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 ...
- 七、Java 14 新特性
七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...
- 【Java 8 新特性】Java Comparator | 比较器
Java Comparator | 比较器 比较器功能方法:compare(T o1, T o2) 1. 使用 Lambda 表达式定义 compare 2. 自定义 compare 实现比较器 比较 ...
- 【Java 8 新特性】Java Comparator.nullsFirst | 将空元素被认为小于非空元素
Java Comparator.nullsFirst | 将空元素被认为小于非空元素 使用 Comparator.nullsFirst 参考文献 nullsFirst是比较器功能接口的静态方法. Ja ...
- 跟我学 Java 8 新特性之 Stream 流基础体验
转载自 跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...
最新文章
- gitlab合并分支后需要提交吗_阿里前端,如何基于 GitLab 进行「自动化」构建及发布...
- mysql数据的引用_MySQL数据库入门:mysql操作和程序引用
- java 命名管道_Java中命名管道的并发读/写(在Windows上)
- python中thread的setDaemon、join的用法
- 事务没提交的数据查的出来吗?_“金三银四”面试官:说说事务的ACID,什么是脏读、幻读?...
- 助力 Android 抗衡 iOS,华为发布方舟编译器!
- 通过phantomjs 进行页面截图
- linux php imagick 扩展安装,linux下为php5.3安装Imagick扩展
- Python字符串swapcase()
- ijcai2017赛后总结
- htc g12 android 4,HTC Desire S G12 刷 官方Android4.0.4
- java类图资料整理
- 无损音乐刻录成cd有意义吗_这5个强大免费的无损音乐网站,你收藏了吗?
- java自动拼图_JAVA编写拼图小游戏带自动寻路算法
- 联想家庭版 mysql_联想自带win7家庭版..
- 谷歌浏览器 抖动 chrome 上下抖动 问题解决
- 计算机磁盘清理软件,清理磁盘空间的7种技巧,电脑装机、安装系统必备
- hypermill后处理构造器安装_ug10后处理安装步骤ug后处理在什么位置ug法兰克后处理下载ug后处理器如何设置ug后处理构造器...
- 比尔盖茨 鸿蒙系统,华为鸿蒙系统曝光后,比尔盖茨遗憾表示:最大失误是让安卓崛起了...
- 常见游戏设计思路及手法
热门文章
- django restframework serializer 增加自定义字段
- 季冠2022年会 | 我们乘风而去 必将破浪而归
- Linux bridge模块的一次重构(让bridge归bridge让eth0归eth0)
- RabbitMQ 整合SpringBoot
- 计算机本地网络如何共享,本地网络共享如何实现?
- win8打印机显示服务器脱机,Win8连接局域网打印机失败解决方法汇总
- matlab kappa风险分析,我为什么反对在属性数据MSA中用Kappa分析(上) | 汽车质量管理笔记...
- matlab怎么做多元非线性拟合,如何用matlab进行多元非线性拟合
- html图片橡皮擦特效,原生制作的js涂鸦画板特效 可调画笔颜色|粗细|橡皮檫功
- 恒指2.25日预测及操作建议