2014-03-30 23 views
0

好吧,我有一個表號如何使@Override比較器使基於Integer的CellTable中的列不基於字符串(GWT)進行排序?

 
No 
1 
2 
5 
10 
20 

的列表。如果我爲沒有列使用字符串這樣設置columnSortHandler

columnSortHandler.setComparator(noColumn, new Comparator<String[]>() { 
     @Override 
     public int compare(String[] o1, String[] o2) { 
      if (o1==o2) { 
        return 0; 
      } 


      if (o1 != null) { 

       return (o2 != null) ? o1[0].compareTo(o2[0]) : 1; 
      } 
      return -1; 
     } 
    }); 

然後,它會不會有點像整數但像String。例如:它會這樣排序:

 
No 
1 
10 
2 
20 
5 

然後它是不正確的。

所以嘗試:

columnSortHandler.setComparator(noColumn, new Comparator<String[]>() { 
     @Override 
     public int compare(String[] o1, String[] o2) { 
      if (o1==o2) { 
        return 0; 
      } 


      if (o1 != null) { 

       return (o2 != null) ? Integer.parseInt(o1[0]).compareTo(Integer.parseInt(o2[0]) : 1; 
      } 
      return -1; 
     } 
    }); 

不過的compareTo不適用於整數。

所以我的問題是

如何@Override比較,以使在基於整數CellTable排序的列不是基於字符串(GWT)?

回答

2

使用Integer.valueOf()如下所示

return (o2 != null) ? Integer.valueOf(o1[0]).compareTo(Integer.valueOf(o2[0])) : 1; 

代替

return (o2 != null) ? Integer.parseInt(o1[0]).compareTo(Integer.parseInt(o2[0]) : 1; 

的Integer.parseInt()返回原始INT未包裝器Integer類。

不能在基本類型int

有很多方法來String轉換成Integer包裝類調用的compareTo(INT)。

嘗試任何一個:

  • Integer.valueOf(字符串)
  • 新的整數(字符串)
  • Integer.getInteger(字符串)
+0

真棒,非常感謝你。 – Tum