【问题标题】:Sort array containing null elements [duplicate]对包含空元素的数组进行排序[重复]
【发布时间】:2016-04-27 10:35:02
【问题描述】:
我有一个大小为 1000 的字符串数组:
String[] subStrStore = new String[1000];
数组中只有 6 个元素。如果我使用以下方法对其进行排序:
Arrays.sort(subStrStore);
我得到一个空指针异常,因为它试图比较空元素。如何解决这个问题?
【问题讨论】:
标签:
java
arrays
sorting
nullpointerexception
【解决方案1】:
看看 java.util.Arrays 中的 Arrays.copyOf()。它会完成我相信的工作。
【解决方案2】:
删除空元素并排序。
String[] subStrStore = new String[1000];
subStrStore[10] = "f";
subStrStore[200] = "e";
subStrStore[300] = "d";
subStrStore[500] = "c";
subStrStore[750] = "b";
subStrStore[900] = "a";
String[] sorted = Stream.of(subStrStore)
.filter(s -> s != null)
.sorted()
.toArray(String[]::new);
System.out.println(Arrays.toString(sorted));
// -> [a, b, c, d, e, f]
【解决方案3】:
如果字符串是您可以使用的前 6 个元素
Arrays.sort(subStrStore, 0, 6);
【解决方案4】:
我认为最好的方法是在比较之前检查元素。类似的东西:
if(object == null){break;}
这只有在你使用数组的第一个元素时才有效。
1、2、3、4 NULL,NULL ... x1000。 NOT 1,2, NULL, NULL, 3, 4, 5.
【解决方案5】:
使用自定义比较器,
Arrays.sort(subStrStore, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1 == o2)
return 0;
if (o1 == null) {
return -1;
}
if (o2 == null) {
return 1;
}
return o1.compareTo(o2);
}
});
这应该将所有空值推到数组的末尾