nsstring 空值比较_用比较器的nulls排序具有空值的列表

nsstring 空值比较

你好朋友,

在本教程中,我们将看到如何使用Java 8 Comparator.nullsFirst在列表中的项目很少为空时如何对项目列表进行排序,从而将null视为列表中的最小元素。

–什么是比较器
– nullsFirst方法在Comparator中做什么
–排序具有非空名称的字符串列表 –不使用nullsFirst排序具有名称和Null的字符串列表 –通过使用nullsFirst方法对列表进行排序来解决上述问题 –对不包含空值的自定义对象列表进行排序 –在不使用nullsFirst的情况下对具有null的Custom对象列表进行排序 –通过使用nullsFirst方法对列表进行排序来解决上述问题 –排序雇员姓名为空的列表

比较器是一个FunctionalInterface,具有以下抽象方法

int比较(T
o1,T
o2);

因此,如果要排序,请说出您的列表。您可以创建一个实现Comparator接口的compare方法的类,其中可以定义排序的逻辑,然后将此比较器传递给list.sort()方法,然后它将根据您的排序定义的逻辑。

另外,您可以将lambda函数(实现Comparator的compare方法)传递给list.sort()方法,而不是创建一个单独的类来实现Comparator接口。

nullsFirst方法在Comparator中做什么?

在Java 8中,Comparator接口中添加了许多默认和静态方法。

nullsFirst是Comparator接口中定义的静态方法之一,具有以下签名:

上市
静态 <T> Comparator <T> nullsFirst(Comparator <?
超级 T> 比较器)

那怎么办呢?

–返回对null友好的比较器,该比较器认为null小于非null。

–当两个对象均为空时,它们被视为相等。

–当两者都不为null时,将指定的比较器作为参数传递给nullsFirst方法,以确定排序顺序

–当指定的比较器为null时,返回的比较器将所有非null值视为相等。

要了解nullsFirst的用法,让我们尝试对具有雇员姓名的String列表进行排序,

–首先没有空值

–然后使用空值但不使用nullsFirst

–然后使用null值和nullsFirst

–然后,我们将对自定义Employee对象执行上述步骤

–然后,如果自定义对象中需要根据其进行排序的属性之一为空,那么我们将看到该情况

对具有非空名称的字符串列表进行排序

 package com.blogspot.javasolutionsguide;  import java.util.Arrays;  import java.util.List;  import java.util.Comparator;  public class ComparatorTestWithListOfNamesWithoutNulls { public static void main(String[] args) { List<String> names = Arrays.asList( "Gaurav" , "Tendulkar" , "Suresh" , "Rohit" , "Bumrah" ); System.out.println( "Before Sorting:" ); names.forEach(System.out ::println); names.sort(Comparator.naturalOrder()); System.out.println( "After Sorting:" ); names.forEach(System.out ::println); } 
 } 

这是输出:

排序之前:

高拉夫

滕杜尔卡

苏雷什

罗希特

布姆拉

排序后:

布姆拉

高拉夫

罗希特

苏雷什
滕杜尔卡

在不使用null的情况下对具有名称和null的字符串列表进行排序

 package com.blogspot.javasolutionsguide;  import java.util.Arrays;  import java.util.Comparator;  import java.util.List;  public class ComparatorTestWithListOfNamesAndNulls { public static void main(String[] args) { List<String> names = Arrays.asList( "Gaurav" , null , "Sachin" , "Suresh" , null , "Rohit" , "Jasprit" , null ); System.out.println( "Before Sorting:" ); names.forEach(System.out ::println); names.sort(Comparator.naturalOrder()); System.out.println( "After Sorting:" ); names.forEach(System.out ::println); } 
 } 

这是输出:

排序之前:

高拉夫

空值

萨钦

苏雷什

空值

罗希特

Jasprit

空值

线程“ main”中的异常
java.lang.NullPointerException

在java.base / java.util.Comparators $ NaturalOrderComparator.compare(
Comparators.java:52)

在java.base / java.util.Comparators $ NaturalOrderComparator.compare(
Comparators.java:47)

在java.base / java.util.TimSort.countRunAndMakeAscending(
TimSort.java:355)

在java.base / java.util.TimSort.sort(
TimSort.java:220)

在java.base / java.util.Arrays.sort(
Arrays.java:1442)

在java.base / java.util.Arrays $ ArrayList.sort(
Arrays.java:4426)

在com.blogspot.javasolutionsguide.ComparatorTestWithListOfNamesAndNulls.main(ComparatorTestWithListOfNamesAndNulls.java:12)

正如我们所看到的那样,因为NaturalOrderComparator的compare方法试图通过对一个对象调用compareTo来比较两个o对象,所以我们得到了NullPointerException。

通过使用nullsFirst方法对列表进行排序来解决上述问题

 package com.blogspot.javasolutionsguide;  import java.util.Arrays;  import java.util.List;  import java.util.Comparator;  /** * @author javasolutionsguide * */  public class ComparatorTestWithNullsFirstForListOfNames { public static void main(String[] args) { List<String> names = Arrays.asList( "Gaurav" , null , "Tendulkar" , "Suresh" , null , "Rohit" , "Jasprit" , null ); System.out.println( "Before Sorting:" ); names.forEach(System.out ::println); names.sort(Comparator.nullsFirst(Comparator.naturalOrder())); System.out.println( "After Sorting:" ); names.forEach(System.out ::println); } 
 } 

这是输出:

排序之前:

高拉夫

空值

滕杜尔卡

苏雷什

空值

罗希特

Jasprit

空值

排序后:

空值

空值

空值

高拉夫

Jasprit

罗希特

苏雷什

滕杜尔卡

对不包含空值的自定义对象列表进行排序

我们将创建一个Employee类,它将是一个简单的POJO,如下所示:

 package com.blogspot.javasolutionsguide;  public class Employee { private int id; private String name; private String department; public Employee( int id, String name, String department) { super (); this .id = id; this .name = name; this .department = department; } public int getId() { return id; 
 } public String getName() { return name; } public String getDepartment() { return department; } @Override public String toString() { return "Employee [id=" + id + ", name=" + name + ", department=" + department + "]" ; }  } 

这是我们的测试课:

 package com.blogspot.javasolutionsguide;  import java.util.Arrays;  import java.util.Comparator;  import java.util.List;  public class ComparatorTestWithListOfEmployeesWithoutNulls { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee( 1 , "Gaurav" , "IT" ), new Employee( 1 , "Tendulkar" , "Admin" ), new Employee( 1 , "Suresh" , "IT" ), new Employee( 1 , "Rohit" , "Admin" ), new Employee( 1 , "Bumrah" , "Admin" )); System.out.println( "Before Sorting:" ); employees.forEach(System.out ::println); System.out.println( "After Sorting:" ); employees.sort(Comparator.comparing(Employee :: getName)); employees.forEach(System.out::println); 
 } 

这是输出:

排序之前:

员工[id = 1,名称= Gaurav,部门= IT]

员工[id = 1,名称= Tendulkar,部门=管理员]

员工[id = 1,姓名= Suresh,部门= IT]

员工[id = 1,名称= Rohit,部门=管理员]

员工[id = 1,名称= Bumrah,部门=管理员]

排序后:

员工[id = 1,名称= Bumrah,部门=管理员]

员工[id = 1,名称= Gaurav,部门= IT]

员工[id = 1,名称= Rohit,部门=管理员]

员工[id = 1,姓名= Suresh,部门= IT]

员工[id = 1,名称= Tendulkar,部门=管理员]

不使用null排序具有null的自定义对象列表

 package com.blogspot.javasolutionsguide;  import java.util.Arrays;  import java.util.Comparator;  import java.util.List;  public class ComparatorTestWithListOfEmployeesWithNulls { public static void main(String[] args) {  List<Employee> employees = Arrays.asList( new Employee( 1 , "Gaurav" , "IT" ), null , new Employee( 1 , "Tendulkar" , "Admin" ), new Employee( 1 , "Suresh" , "IT" ), 
 null , new Employee( 1 , "Rohit" , "Admin" ), new Employee( 1 , "Bumrah" , "Admin" ), null ); employees.sort(Comparator.comparing(Employee::getName)); employees.forEach(System.out::println); 
 } 
 } 

这是输出:

排序之前:

员工[id = 1,名称= Gaurav,部门= IT]

空值

员工[id = 1,名称= Tendulkar,部门=管理员]

员工[id = 1,姓名= Suresh,部门= IT]

空值

员工[id = 1,名称= Rohit,部门=管理员]

员工[id = 1,名称= Bumrah,部门=管理员]

空值

线程“ main”中的异常
java.lang.NullPointerException

在java.base / java.util.Comparator.lambda $ comparing $ 77a9974f $ 1(
比较器(java:469)

在java.base / java.util.TimSort.countRunAndMakeAscending(
TimSort.java:355)

在java.base / java.util.TimSort.sort(
TimSort.java:220)

在java.base / java.util.Arrays.sort(
Arrays.java:1442)

在java.base / java.util.Arrays $ ArrayList.sort(
Arrays.java:4426)

在com.blogspot.javasolutionsguide.ComparatorTestWithListOfEmployeesWithNulls.main(ComparatorTestWithListOfEmployeesWithNulls.java:19)

通过使用nullsFirst方法对列表进行排序来解决上述问题

 package com.blogspot.javasolutionsguide;  import java.util.Arrays;  import java.util.Collections;  import java.util.Comparator;  import java.util.List;  public class ComparatorTestWithListOfEmployeesWithNullsAndNullsFirst { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee( 1 , "Gaurav" , "IT" ), null , new Employee( 1 , "Tendulkar" , "Admin" ), new Employee( 1 , "Suresh" , "IT" ), 
 null , new Employee( 1 , "Rohit" , "Admin" ), new Employee( 1 , "Bumrah" , "Admin" ), null ); Collections.sort(employees ,Comparator.nullsFirst((emp1 ,emp2) -> emp1.getName().compareToIgnoreCase(emp2.getName()))); employees.forEach(System.out::println); }  } 

这是输出:

空值

空值

空值

员工[id = 1,名称= Bumrah,部门=管理员]

员工[id = 1,名称= Gaurav,部门= IT]

员工[id = 1,名称= Rohit,部门=管理员]

员工[id = 1,姓名= Suresh,部门= IT]

员工[id = 1,名称= Tendulkar,部门=管理员]

排序雇员姓名为null的列表

 package com.blogspot.javasolutionsguide;  import java.util.Arrays;  import java.util.Comparator;  import java.util.List;  public class ComparatorTestWithListOfEmployeesWithNullNamesAndNullsFirst { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee( 1 , "Gaurav" , "IT" ), new Employee( 1 , "Tendulkar" , "Admin" ), new Employee( 1 , null , "IT" ), new Employee( 1 , "Rohit" , "Admin" ), new Employee( 1 , "Bumrah" , "Admin" )); System.out.println( "Before Sorting:" ); employees.forEach(System.out ::println); employees.sort(Comparator.comparing(Employee::getName,Comparator.nullsFirst(Comparator.naturalOrder()))); System.out.println( "After Sorting:" ); employees.forEach(System.out::println); }  } 

这是输出:

排序之前:

员工[id = 1,名称= Gaurav,部门= IT]

员工[id = 1,名称= Tendulkar,部门=管理员]

员工[id = 1,姓名=空,部门= IT]

员工[id = 1,名称= Rohit,部门=管理员]

员工[id = 1,名称= Bumrah,部门=管理员]

排序后:

员工[id = 1,姓名=空,部门= IT]

员工[id = 1,名称= Bumrah,部门=管理员]

员工[id = 1,名称= Gaurav,部门= IT]

员工[id = 1,名称= Rohit,部门=管理员]

员工[id = 1,名称= Tendulkar,部门=管理员]

摘要

当我们有几个元素为null的元素列表并且希望将这些null视为列表中最小的元素时,我们可以使用Comparator接口的nullsFirst方法,该方法执行以下操作:

返回一个对null友好的比较器,该比较器认为null小于非null。

–当两个对象均为空时,它们被视为相等。

–当两者都不为null时,将指定的比较器作为参数传递给nullsFirst方法,以确定排序顺序

–当指定的比较器为null时,返回的比较器将所有非null值视为相等。

谢谢阅读。 如果您喜欢该帖子,则可以共享它并可以订阅此博客以获取更多此类帖子。

翻译自: https://www.javacodegeeks.com/2020/02/sorting-a-list-having-null-values-with-comparators-nullsfirst.html

nsstring 空值比较

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hibernate的Configuration和配置文件

一、hibernate的入口Configuration 在Hibernate中&#xff0c;Configuration是hibernate的入口。在实例化一个Configuration的时候&#xff0c;Hibernate会自动在环境变量&#xff08;classpath&#xff09;里面查找Hibernate配置文件hibernate.properties。如果该文件存在&…

单片机c语言6种开方,单片机快速开平方的算法

C语言中开平方的算法中要开平方的话,可以在头文件中加#include .然后调sqrt(n);函数即可.但在单片机中要开平方.可以用到下面算法:算法1:本算法只采用移位、加减法、判断和循环实现&#xff0c;因为它不需要浮点运算&#xff0c;也不需要乘除运算&#xff0c;因此可以很方便地运…

spring 配置只读事务_只读副本和Spring Data第3部分:配置两个实体管理器

spring 配置只读事务我们之前的设置可以正常工作。 我们现在要做的是进一步发展&#xff0c;并配置两个单独的实体管理器&#xff0c;而不会影响我们之前实现的功能。 第一步是将默认实体管理器配置设置为主要配置。 这是第一步 package com.gkatzioura.springdatareadreplic…

java流与文件——读写二进制数据(DataOutput + DataInput)

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——读写二进制数据&#xff08;DataOutput DataInput&#xff09;的相关知识&#xff1b; 0.2&#xff09; for complete my diy code, please visit https://github.com/p…

dsp课程设计c语言源码,DSP课程设计-基于C语言实现256点的FFT精选.pdf

DSP课程设计-基于C语言实现256点的FFT精选XX 大学J1111111 UNIVERSITYDSP 课 程 设 计基于CCS 的FFT 算法的C 语言实现和验证学院名称&#xff1a;专业班级&#xff1a;学 号&#xff1a;学生姓名&#xff1a;指导教师姓名&#xff1a;201 年 0 月 0 日一、 课程设计目的1.此次…

java 字符数组与字符串_用于字符串和数组的5种简单有效的Java技术

java 字符数组与字符串Java通常会排在前五种最流行的编程语言中&#xff0c;因此可以理解。 它是一种通用语言&#xff0c;非常容易学习&#xff0c;因为它是一种高级语言&#xff0c;并且可以满足许多用例。 由于这些原因&#xff0c;Java是一门很棒的语言&#xff0c;可以用来…

Hibernate之映射

一、映射文件 Hibernate在实现ORM功能的时候主要用到的文件有&#xff1a; 1、 映射类&#xff08;*.Java&#xff09; 描述数据库表的结构&#xff0c;表的字段映射为类的属性&#xff0c;表的记录映射为类的对象。 2、映射文件&#xff08;*.hbm.xml&#xff09; …

java流与文件——ZIP文档

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——ZIP文档 的相关知识&#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/cha…

单片机与gsm通信c语言,gsm模块如何与单片机通信?

51单片机与GSM模块实现通信1、检测串口线的好坏1)将串口线插在电脑上&#xff0c;用短路子短接串口的2脚和3脚2)打开串口调试助手3)点击自动发送&#xff0c;在自动发送的窗口中随便发个数据&#xff0c;看看能不能接收到若能接收到自己发的数据表示串口线是正常的&#xff0c;…

aws terraform_在AWS第1部分中使用Terraform自动缩放组:基本步骤

aws terraform因此&#xff0c;您想使用Terraform在AWS上创建一个自动缩放组。 以下是达到此目的的最少步骤。 在编写实际代码之前&#xff0c;应指定aws terraform提供程序以及provider.tf文件上的区域。 provider "aws" { version "~> 2.0" region …

java流与文件——java生成解压缩文件(夹)

【0】README 0.1&#xff09; 本文描述转自 http://blog.csdn.net/chenssy/article/details/9622171 &#xff0c; 旨在理解 java流与文件——java生成解压缩文件&#xff08;夹&#xff09; 的相关知识&#xff1b; 0.2&#xff09; for my diy source code, please visit h…

Java的系统Property

一、java 系统Properties修改 (1)System.getProperties()可以确定当前的系统属性,返回值是一个Properties; (2)System.load(String filename)加载文件中的属性Properties等同于&#xff1a;System.getProperties().load(String filename) (3)System.setProperties(Properties p…

android 发布最新系统更新包,安卓升级包(安卓补丁包更新)

安卓升级包(安卓补丁包更新)2021-02-08 15:39“固件升级”文石BOOX Android 6.0及以上型号都支持升级最新系统&#xff01;好消息&#xff01;截至今天&#xff0c;您在BOOX安卓6.0系统以上的所有阅读器型号&#xff0c;都支持升级到最新BOOX OS 2.3.1系统了&#xff01;?的设…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)

apache.camel我以前曾在博客中介绍过我们在下一个Camel 3.1版本中所做的优化 博客第1部分 博客第2部分 今天&#xff0c;我想简要介绍一下我们已经完成的最新开发&#xff0c;因为我们准备在本周末或下半年准备好构建和发布Camel 3.1。 从第2部分开始&#xff0c;我们设法在…

AVL树的单双旋转解析

【0】README 0.0&#xff09; 本文部分idea 转自&#xff1a;http://blog.csdn.net/collonn/article/details/20128205 0.1&#xff09; 本文专注于 解析 AVL 树的 单旋转&#xff08;左左单旋转和右右单旋转&#xff09; 和 双旋转&#xff08;左右双旋转和右左单旋转&#…

List转数组toArray方法

一、List.toArray方法 List提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法&#xff1a; Object[]toArray() 返回按适当顺序包含列表中的所有元素的数组&#xff08;从第一个元素到最后一个元素&#xff09;。<T> T[]toArray(T…

android定位会出现的问题,android – 使用GPS_PROVIDER进行定位时出现问题

使用&#xff1a;locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, locationListener);对于locationListener,您可以使用&#xff1a;LocationListener locationListener new Locati…

自底向上伸展树(之字形旋转+一字形旋转)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c;核心剖析路线为原创&#xff0c; 旨在理清 自底向上伸展树&#xff08;之字形旋转一字形旋转&#xff09; 的基本思路&#xff1b; 0.2&#xff09; 自底向上伸展树 是基于 AVL树&#xff0c;for deta…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第2部分)

apache.camel我以前曾在博客中介绍我们在下一个Camel 3.1版本&#xff08;第1部分&#xff09;中所做的优化 。 今天&#xff0c;我想发布大约4周后的状态更新。 我们集中在三个方面优化骆驼核心&#xff1a; 不必要的对象分配 不必要的方法调用 提高绩效 换句话说&#…

Util包中Arrays

java.util 类 Arrays java.lang.Object -java.util.Arrayspublic class Arrays extends Object此类包含用来操作数组&#xff08;比如排序和搜索&#xff09;的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明&#xff0c;否则如果指定数组引用为 …