2015-11-24 1 views
0

J'essaie de faire un tri personnalisé d'objets de calendrier (extraits d'une classe Node) avec tous les zéros rencontrés poussés à la fin lorsqu'ils sont triés.Le comparateur ne trie pas s'il rencontre une valeur nulle

Ceci est mon code:

public class CustomComparatorPubDate implements Comparator<Node> { 

@Override 
public int compare(Node o1, Node o2) { 
    try { 
     Calendar d1 = o1.getProperty("jcr:content/metadata/jcr:pubdate").getDate(); 
     Calendar d2 = o2.getProperty("jcr:content/metadata/jcr:pubdate").getDate(); 
     LOGGER.debug("d1: " + d1); 
     LOGGER.debug("d2: " + d2); 
     if (d2 == null && d1 == null) return 0; 
     if (d1 == null) return 1; 
     if (d2 == null) return -1; 

     int compar = d1.compareTo(d2); 
     LOGGER.debug("compar: " + compar); 
     return compar; 

    } catch (RepositoryException e) { 
     // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return 0; 
     } 
    } 
} 

Mon appel à la classe ci-dessus:

Collections.sort(listofnodes, new CustomComparatorPubDate()); 

J'ai un tableau de test où l'un des biens d'objet est délibérément laissé nulle pour le test, où cela échoue. Si je peuple cette propriété, cela semble fonctionner correctement.

Une idée de ce qui ne va pas et comment y remédier? P.S: Eclipse ne me permettrait pas d'écrire ceci sans le bloc try/catch.

Edit: Dans les journaux, je vois qu'il jette un javax.jcr.PathNotFoundException

+0

Qu'est-ce que cela implique? – gonzo

+0

Il ne trier pas. Le tableau de liste d'intérêt est inchangé avant et après l'opération de tri. –

+0

Veuillez poster la pile. – d33t

Répondre

0

On dirait que vous avez un petit bug où si d1 est nul vous les trier avant d2 même si d2 est pas nul.

if (d1 == null) return 1;

Donc, si vous changez cette option pour retourner -1 il doit trier la façon dont vous recherchez.

+0

Nope. J'ai essayé et c'est toujours pareil. Merci d'avoir essayé. –