[英]GWT CellTable does not sort correctly if the column contains NULL cells
我正在使用GWT CellTable,並且如果該列包含NULL單元格以及非NULL的單元格,則以下代碼無法正確排序:
columnSortHandler.setComparator(sixColumn, new Comparator<SectDtlsString>() {
@Override
public int compare(SectDtlsString o1, SectDtlsString o2) {
if (o1 == o2) {
return 0;
}
// Compare the Six columns.
if (o1 != null) {
return (o2 != null) ? o1.getsixPatrol().compareTo(o2.getsixPatrol()) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
例如:
黑色,空,空,紅色-不執行任何操作。 它應該返回-第一次選擇時為null,null,黑色,紅色,第二次選擇時為Red,Black,null,null
黑色,紅色,棕色,Tawney-在第一次選擇時返回-黑色,棕色,紅色,Tawney,並且在第二次選擇時返回-Tawney,紅色,棕色,黑色(即,無空值有效)。
我有幾乎相同的代碼,它們引用不包含NULL的列,並且它們排序得很好。 我從教程中復制了此代碼。
這是建議后的結果:
// Compare the Six columns.
if (o1 != null) {
if (o1 == o2) {
return 0;
}
if (o1.getsixPatrol() != null) {
if (o1.getsixPatrol() == o2.getsixPatrol()) {
return 0;
}
return o2 != null ? o1.getsixPatrol().compareTo(o2.getsixPatrol()) : 1;
}
}
return -1;
您的代碼中有兩個問題。
首先,空檢查在錯誤的位置: o1 == o2
如果o1為空,則o1 == o2
將通過異常。 它應該是:
// Compare the Six columns.
if (o1 != null) {
if (o1 == o2) {
return 0;
}
return o2 != null ? o1.getsixPatrol().compareTo(o2.getsixPatrol()) : 1;
}
其次,僅檢查o1和o2不為null是不夠的。 在比較它們之前,還需要檢查o1.getsixPatrol()
和o2.getsixPatrol()
是否不為null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.