我的问题是TableRowSorter不正确地对双精度和整数进行排序,我一直在搜索并尝试下面列出的几乎所有解决方案。
-使用getColumnClass()
-使用setComparator()
@Override
public Class<?> getColumnClass(int column)
{
if (column == 4)
return Integer.class;
else
return String.class;
}
};
sorter.setComparator(4, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
int len1 = o1.toString().length();
int len2 = o2.toString().length();
if (len1==len2) {
return o1.compareTo(o2);
} else {
return len1-len2;
}
}
})
答案 0 :(得分:1)
这只是为了纠正您执行compare方法的情况,
代替您当前的方法,
@Override
public int compare(Integer o1, Integer o2) {
int len1 = o1.toString().length();
int len2 = o2.toString().length();
if (len1==len2) {
return o1.compareTo(o2);
} else {
return len1-len2;
}
}
您应该只使用Integer类的compare方法,就像这样。简单,安全且易于管理。
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
这样,如果尝试执行len1-len2之类的操作,它将不会让您遇到整数溢出的情况。想象一下,如果len1已经是最低的负整数,并且您进一步尝试从中减去某物?