簡體   English   中英

如果列包含NULL單元格,則GWT CellTable無法正確排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM