2013-03-21 80 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