2013-03-21 84 views
1

这种错?它不能正常工作。Collections排序Java

public List<LibRegistration> getLibraryRegistrationsSortedByTypeAndName() 
    { 
     List<LibRegistration> l = getLibRegs(); 
     Collections.sort(l, new Comparator<LibRegistration>() { 
      public int compare(LibRegistration o1, LibRegistration o2) { 
       return o1.getLibraryType().compareTo(o2.getLibraryType()) != 0?o1.getLibraryType().compareTo(o2.getLibraryType()):o1.getLibraryName().compareTo(o2.getLibraryName()); 
      } 
     }); 
     return l; 
    } 
+3

它以何种方式无法正常工作? – NPE 2013-03-21 09:57:37

+0

你期待什么行为,你没有看到?它产生了什么输出? – Gian 2013-03-21 09:57:42

+0

我看起来很好。 getLibraryType,getLibraryName或者你的compareTo用法可能有问题 - 或者不是你所期望的。 – Patashu 2013-03-21 09:59:03

回答

4

没有错,更清晰:

 public int compare(LibRegistration o1, LibRegistration o2) { 
      int cmp = o1.getLibraryType().compareTo(o2.getLibraryType()); 
      if (cmp == 0) 
       cmp = o1.getLibraryName().compareTo(o2.getLibraryName()); 
      return cmp; 
     } 

虽然空不允许的,良好的compareTo定义。

+0

这很奇怪。我期望它能以SQL查询的方式工作** order by **子句,但它给出了意想不到的排序。所以我只连接了两个字符串(类型和名称),并在连接的字符串上做了一次compareTo。我想这也是更快的性能。但直到想知道我的逻辑是否有缺陷才能使其表现为SQL ORDER BY。任何建议或解释? – user1872371 2013-03-24 04:29:33

+0

这很奇怪。我期望它能以SQL查询的方式工作** order by **子句,但它给出了意想不到的排序。所以我只连接了两个字符串(类型和名称),并在连接的字符串上做了一次compareTo。我想这也是更快的性能。但直到想知道我的逻辑是否有缺陷才能使其表现为SQL ORDER BY。任何建议或解释? @NPE – user1872371 2013-03-24 04:31:58

+0

SQL ORDER BY涉及**大小写敏感**和**语言区域设置**。你也可以在Java中做类似的事情。如果您使用MySQL,那么您的候选人有自己经常被滥用的语言环境。 – 2013-03-24 18:15:19