如果它具有空元素,則不能Arrays.sort()用于Integer型別陣列。與int型別陣列不同,null值不賦值為0。如果型別陣列有元素,
如何排序?Integernull
Integer[] arr=new Integer[4] {6,7,null,null};
我想對這個arr陣列變數進行排序。
錯誤如下:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.lang.Comparable.compareTo(Object)" because "a[runHi]" is null
at java.base/java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
at java.base/java.util.Arrays.sort(Arrays.java:1040)
at Example.medicinePriceForGivenDisease(Example.java:41)
at Example.main(Example.java:21)
uj5u.com熱心網友回復:
該java.util.Arrays班所有必要的分類,包括方法sort(Object[] a)。由于Integer是一個物件,它會做得很好:
Integer[] arr = new Integer[] { 32, 12, 9, 77 };
Arrays.sort(arr);
// Array sorted it
uj5u.com熱心網友回復:
既然Integer是 a Comparable,就可以使用多載的Arrays.sort(Object[]). IE:
Integer[] arr = new Integer[4]; //not "int"
// fill in some data in arr
Arrays.sort(arr);
編輯:
為了解決null評論中關于s的陳述,實際上,由處理的自然順序Arrays.sort(Object[])將不會處理nulls (因為它們沒有自然順序)。但是,您可以使用自定義Comparator. 例如,您可以任意決定將所有nulls移動到陣列的末尾:
Arrays.sort(arr, Comparator.nullsLast(Comparator.naturalOrder()));
uj5u.com熱心網友回復:
單個引數Arrays.sort(Object[])對必須Comparable使用該compareTo方法實作介面的元素進行排序。基本上它需要 e1.compareTo(e2)陣列的元素。如果其中一個e1或e2為空,這將引發例外。
解決方案:使用 2 引數Arrays.sort(T[], Comparator<? super t)并提供一個Comparator能夠比較 2 個元素的引數,即使其中一個或兩個都為空。
非常簡單的例子(比較null為 be 0):
var comparator = Comparator.comparingInt((Integer n) -> n==null ? 0 : n.intValue());
Arrays.sort(arr, comparator);
類實作Comparator也可用于更復雜的排序:
class MyComparator implements Comparator<Integer> {
@Overwrite
public int compare(Integer a, Integer b) {
if (a == null && b == 0) return 0;
if (a == null) return -1;
... // must be implemented
}
}
Arrays.sort(arr, new MyComparator());
撰寫這篇文章時沒有使用或傷害任何 IDE;包含的代碼僅作為如何解決問題的想法 - 它不完整,最終錯誤甚至包含編譯錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405605.html
標籤:
上一篇:在Java中對具有多個變數(整數)的類作為值的哈希表進行排序的最佳方法是什么?
下一篇:日志排序-自定義排序不起作用
