好的,我得到了一张名为No。
的表No 1 2 5 10 20
如果我使用如下字符串为No列设置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不适用于Integer。
所以我的问题是
如何@Override Comparator基于不基于字符串(GWT)的Integer使CellTable中的列排序?
答案 0 :(得分: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
上调用compareTo(int)
有很多方法可以将String
转换为Integer
包装类。
尝试任何一个: