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 空值比較
總結
以上是生活随笔為你收集整理的nsstring 空值比较_用比较器的nulls排序具有空值的列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新电脑不知道安装什么软件新电脑需要安装的
- 下一篇: 制作安装系统优盘的详细图文教程制作安装系