我有一个类似的数组:
[null, null, 3, 4, null]
我想将其更改为与此类似的数组:
[3, 4, null, null, null]
我知道如何手动完成,但看起来很难看。 是否有内置(使用最少的自定义代码)方法吗? (可能是System.arraycopy的东西)
我完成了类似的事情(感谢@Braj的想法):
@Test
public void test() {
Integer[] k = new Integer[]{null, null, 3, 2, 1};
k[1] = null;
Arrays.sort(k, new Comparator<Object>() {
public int compare(Object o1, Object o2) {
System.out.println(o1);
if (o1 == null) return 1;
else if(o2 == null) return -1;
else return 0;
}
});
assertArrayEquals(
new Integer[]{3, 2, 1, null, null},
k
);
}
如果感兴趣的人有a bigger problem which tried to solve with this code
答案 0 :(得分:6)
使用Arrays.sort(T[],Comparator)并传递Comparator以根据您自己的逻辑进行排序。
在此处阅读更多内容并查找示例代码
以下是对数组进行排序的示例代码,最后推送null
值。
注意:(根据您的需要进行更改,未经过充分测试)
final Integer[] data = new Integer[] { null, null, 3, 4, null };
Arrays.sort(data, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
if(o1 != null && o2!=null){
return o1.compareTo(o2);
}else if(o2 != null){
return o2;
}else{
return Integer.MIN_VALUE; // null values in the end
}
}
});
System.out.println(Arrays.toString(data));
输出:
[3, 4, null, null, null]
如果您只对最后移动null
值感兴趣,请在以下帖子中找到由@Dmitry Ginzburg回答的示例代码
答案 1 :(得分:2)
来自Java标准库的sort
算法是稳定的,因此,如果我们正在制作非空相同的元素(在排序的上下文中),它将保持顺序:< / p>
Arrays.sort(data, new Comparator<Integer>() {
public int compare (Integer x1, Integer x2) {
if (x1 == null && x2 != null)
return 1;
else if (x1 != null && x2 == null)
return -1;
else
return 0;
}
});