如果列包含NULL单元格,则GWT CellTable无法正确排序

时间:2016-06-20 03:42:27

标签: java gwt

我正在使用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,红色 - 什么都不做。它应该在第一次选择时返回null,null,Black,Red,在第二次选择时返回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;

1 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题。

首先,null检查位置错误:如果o1为null,则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不为空是不够的。在比较之前,您还需要检查o1.getsixPatrol()o2.getsixPatrol()是否为空。