如何@Override Comparator基于不基于字符串(GWT)的Integer使CellTable中的列排序?

时间:2014-03-30 10:44:59

标签: java gwt

好的,我得到了一张名为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中的列排序?

1 个答案:

答案 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包装类。

尝试任何一个:

  • Integer.valueOf(字符串)
  • new Integer(String)
  • Integer.getInteger(字符串)