【发布时间】:2014-08-26 11:39:21
【问题描述】:
我有一个类似的数组:
[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
【问题讨论】:
-
请附上您尝试过的代码。
-
你关心非空元素的排序吗?是否应该以任何特定方式对它们进行排序?他们应该保留最初的订单吗?
-
是的,他们应该保留最初的订单
-
1) 它看起来很丑 --> 把那个丑陋的代码放在一个方法中,你就不用再看到那个丑陋的代码(抽象)了。至于使用API,有
java.util.Arrays。如果不存在,您将浪费更多时间寻找解决方案而不是自己解决问题 -
您可以查看 Guava 及其
nullsLast订购。我不确定您是否可以在不同时以任何方式对集合进行排序的情况下使用它,所以它可能不是那么简洁的解决方案。