2016-06-20 17 views
0

I enthält eine GWT CellTable verwende und der folgende Code sortiert nicht korrekt, wenn die Spalte NULL-Zellen als auch Zellen enthält, die nicht NULL:GWT CellTable sortiert nicht korrekt, wenn die Spalte NULL Zellen

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); 

Zum Beispiel:

Schwarz, null, null, Rot - tut nichts. Es sollte zurückgeben - null, null, schwarz, rot bei der ersten Auswahl und rot, schwarz, null, null - bei der zweiten Auswahl

Schwarz, Rot, Braun, Tawney - zurück - Schwarz, Braun, Rot, Tawney auf erste Auswahl und - Tawney, Rot, Braun, Schwarz - bei der zweiten Auswahl (dh keine Nullen funktionieren).

Ich habe fast identischen Code, der sich auf Spalten bezieht, die NULLs nicht enthalten, und sie sortieren sehr gut. Ich habe diesen Code aus einem Tutorial kopiert.

Dies ist das Ergebnis nach der Beratung:

   // 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; 
+0

* der folgende Code wird nicht korrekt sortiert * - ein Beispiel für eine falsche Sortierung und ein Beispiel dafür, wie Sie es sortieren möchten, würde jedem helfen, der versucht, Ihnen zu helfen. –

Antwort

1

Es gibt zwei Probleme in Ihrem Code.

Zuerst ist Null-Überprüfung an der falschen Stelle: o1 == o2 wird durch Ausnahme, wenn o1 null ist. Es sollte sein:

// Compare the Six columns. 
if (o1 != null) { 
    if (o1 == o2) { 
     return 0; 
    } 
    return o2 != null ? o1.getsixPatrol().compareTo(o2.getsixPatrol()) : 1; 
} 

Zweitens ist es nicht genug, dass o1 und o2 zu überprüfen, ist nicht null. Sie müssen auch prüfen, ob o1.getsixPatrol() und o2.getsixPatrol() nicht null sind, bevor Sie sie vergleichen.

+1

Ihr Browser im SuperDev-Modus sollte Ihnen sagen * warum * Sortierung funktioniert nicht. Das Sortieren funktioniert, aber Ihr Code löst eine Ausnahme aus und wird beendet. Mit solchen Ausnahmen sparen Sie eine Menge Zeit. –

+0

Dies ist, was ich von Ihrem Ratschlag kam: – Glyn

+0

// Vergleichen Sie die sechs Spalten. \t \t if (o1! = Null) { \t \t if (o1 == o2) { \t \t return 0; \t \t} \t \t if (o1.getsixPatrol()! = Null) { \t \t \t if (o1.getsixPatrol() == o2.getsixPatrol()) { \t \t \t return 0; \t \t} \t \t \t zurück o2! = Null? o1.getsixPatrol(). compareTo (o2.getsixPatrol()): 1; \t \t \t} \t \t} \t \t \t \t return -1; – Glyn

Verwandte Themen