【Java 8 新特性】Java Comparator.nullsFirst | 将空元素被认为小于非空元素
Java Comparator.nullsFirst | 将空元素被认为小于非空元素
- 使用 Comparator.nullsFirst
- 参考文献
nullsFirst
是比较器功能接口的静态方法。
Java 8
中引入的Comparator.nullsFirst
方法返回一个对null
友好的比较器,认为null
小于非null
。
从Java
源代码中找到它的声明。
static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator)
找到由nullsFirst
方法返回的比较器的工作原理。
1. 空元素被认为小于非空元素。
2. 当两个元素都是空的时候,那么它们被认为是相等的。
3. 当两个元素都是非空的时候,指定的比较器决定了顺序。
4. 如果指定的比较器是空的,那么返回的比较器认为所有非空的元素是相等的。
使用 Comparator.nullsFirst
找到使用Comparator.nullsFirst
方法的例子。
NullsFirstDemo.java
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class NullsFirstDemo {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.nullsFirst(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.nullsFirst(Comparator.comparing(Student::getName)));list.forEach(s -> System.out.println(s));System.out.println("--------Case3: Reverse specified Comparator to nullsFirst---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsFirst(Comparator.comparing(Student::getName).reversed()));list.forEach(s -> System.out.println(s));System.out.println("--------Case4: Reverse Comparator returned by nullsFirst---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsFirst(Comparator.comparing(Student::getName)).reversed());list.forEach(s -> System.out.println(s));System.out.println("--------Case5: Specify natural order Comparator to nullsFirst---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsFirst(Comparator.naturalOrder()));list.forEach(s -> System.out.println(s));System.out.println("--------Case6: Specify null to nullsFirst---------");list = Arrays.asList(s1, null, s2, null, s3);Collections.sort(list, Comparator.nullsFirst(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());}@Override public String toString(){return name + "-" + age; }
}
输出
-------Case1: One null----------
null
Mohan-17
Ram-18
Shyam-22
--------Case2: More than one null---------
null
null
Mohan-17
Ram-18
Shyam-22
--------Case3: Reverse specified Comparator to nullsFirst---------
null
null
Shyam-22
Ram-18
Mohan-17
--------Case4: Reverse Comparator returned by nullsFirst---------
Shyam-22
Ram-18
Mohan-17
null
null
--------Case5: Specify natural order Comparator to nullsFirst---------
null
null
Mohan-17
Ram-18
Shyam-22
--------Case6: Specify null to nullsFirst---------
null
null
Ram-18
Shyam-22
Mohan-17
示例说明
Case-1: 我们的集合中有一个空元素。由于nullsFirst
方法返回的比较器,在排序中,null
元素将排在第一位。非空元素的顺序将由传递给nullsFirst
方法的比较器决定。
Case-2: 我们有一个以上的空元素。我们知道,当两个元素都是空的时候,那么它们被认为是相等的。所以,所有的空元素将被排在第一位。非空元素的顺序将由传递给nullsFirst方法的比较器决定。
Case-3: 在这种情况下,我们将指定的比较器反转到nullsFirst方法。这将只影响非空元素的顺序。所有的空元素将被排在第一位。
Case-4: 在这种情况下,我们将nullsFirst方法返回的比较器反转。现在,所有的空元素将被排在最后。
Case-5: 在这种情况下,我们通过比较器来使用元素的自然顺序。对于自然顺序,元素类需要实现Comparable
和覆盖compareTo
方法。所有的空元素将按顺序排在第一位,非空元素将按其自然顺序排列。
Case-6: 在这种情况下,我们将null
传递给nullsFirst
方法。我们知道,如果指定给nullsFirst
的比较器是null
,那么返回的比较器会认为所有非null
元素都是相等的。所有的空元素将被排在第一位,对非空元素的顺序没有影响。
参考文献
【1】Interface Comparator
【2】Java Comparator.comparing
【3】Java Comparator.nullsFirst
【Java 8 新特性】Java Comparator.nullsFirst | 将空元素被认为小于非空元素相关推荐
- 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 新特性之 Stream 流基础体验
转载自 跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...
最新文章
- 局域网瘫痪 傀儡主机的DDoS***
- Angular (SPA) WebPack模块化打包、按需加载解决方案完整实现
- Python 基础语法(一)
- python饼状图教程_Python数据可视化:饼状图的实例讲解
- 理论 | 教你彻底学会Java序列化和反序列化
- 宠物也能买保险了!鼻纹识别就能建立专属电子档案
- App导航设计全面梳理——可临摹素材原型模版,轻松缕清思路!
- Servlet 数据库访问
- vim 使用、设置笔记
- (四) 数据库表基本操作
- event mpm php,Ubuntu Apache 切换到php-fpm+mpm_event模式
- 【人脸表情识别】基于matlab GUI LBP+SVM脸部动态特征人脸表情识别【含Matlab源码 1369期】
- winXP系统如何打开剪贴板查看器
- 番茄ToDo帮助文档
- mov 指令用c语言写,汇编总结:mov指令
- PNAS:大脑是如何计算主观价值的?
- obd协议 混动车_OBD协议介绍
- 这几个算法可视化网站,太牛了!
- ECshop文件结构说明
- 斗鱼直播Android开发二面被刷,好文推荐
热门文章
- 计算机文化宣传,计算机文化节活动宣传总策划书(doc 42页)
- 2017.10.18——用户体验分析:以“南通市妇幼保健院微信公众号”为例
- PageHelper分页插件使用 及原理
- Java集合——List接口学习总结
- OpenCV.高斯模糊
- 3.7V升压5V2A,锂电池升压5V2.4A方案
- 如何在UEFI模式下安装64位win7系统
- 织梦dedecms响应式房产中介房产代理公司网站模板(自适应手机移动端)
- uniapp 语法基础
- 网站地图是什么?怎么生成?格式有哪些?