日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用比较器的nulls对具有null值的列表进行排序

發布時間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用比较器的nulls对具有null值的列表进行排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你好朋友,

在本教程中,我們將看到如何使用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時,將指定的比較器作為參數傳遞給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

總結

以上是生活随笔為你收集整理的使用比较器的nulls对具有null值的列表进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。