2014-03-30 20 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