2013-01-25 74 views
16

我有一个程序,允许用户从数组中删除一个元素,我想按照字母顺序使用compareTo();通过for循环。但是,空值给我带来了问题。例如空值的数组:排序与空值数组

String[] myArray = {"Apple", "Banana", null, "Durian", null, null, "Grapes"}; 

当Java正在对它们进行比较,并读取空值,它会给我一个NullPointerException。

有什么办法可以在后面用空值对这个数组进行排序吗?例如:

{"Apple", "Banana", "Durian", "Grapes", null, null, null} 

我知道,使用矢量可以解决这个问题,但我只是好奇,如果有任何办法,我可以做它没有改变我的阵列载体。

+4

随着番石榴,这很简单: 'Arrays.sort(array,Ordering.natural()。nullsLast())' –

回答

7

写自己的Comparator接受空值,而且比较传递给Arrays.sort()方法

23

试试这个

Arrays.sort(myArray, new Comparator<String>() { 
     @Override 
     public int compare(String o1, String o2) { 
      if (o1 == null && o2 == null) { 
       return 0; 
      } 
      if (o1 == null) { 
       return 1; 
      } 
      if (o2 == null) { 
       return -1; 
      } 
      return o1.compareTo(o2); 
     }}); 

它产生所要求的顺序