2015-11-24 2 views
0

Я пытаюсь выполнить собственный тип объектов календаря (извлеченных из класса Node) с любыми найденными нулями, которые были перенесены в конец при сортировке.Компаратор не сортирует, если он встречает нуль

Это мой код:

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

Мой призыв к выше класса:

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

У меня есть тестовый массив, в котором один из свойства объекта намеренно левый нуль для тестирования, где это выходит из строя. Если я заполню это свойство, он, похоже, работает нормально.

Любая идея, что не так и как это решить?

P.S: Eclipse не позволит мне написать это без блока try/catch.

Edit: В журналах я вижу, что он бросает javax.jcr.PathNotFoundException

+0

Что происходит в этом случае? – gonzo

+0

Это не сортировка. Список-массив интересов не изменяется до и после операции сортировки. –

+0

Пожалуйста, разместите stacktrace. – d33t

ответ

0

Похоже, у вас есть маленький баг, где, если d1 равно нулю вы сортировки его перед d2, даже если d2 не является нулевым.

if (d1 == null) return 1;

Так что если вы измените это, чтобы вернуться -1 он должен сортировать так, как вы ищете.

+0

Nope. Я пробовал, и все равно то же самое. Спасибо за попытку. –

 Смежные вопросы

  • Нет связанных вопросов^_^