2014-01-16 40 views
0

不知道這是如何不穩定。這在大多數情況下工作正常,但會拋出IllegalArgumentException與一些查詢。獲取java.lang.IllegalArgumentException:比較方法違反了它的一般合約!與排序算法應該100%穩定

就是這樣,想不到更多的相關細節。

private static void sortSearchResults(List<Map> l){ 
     Comparator<Map> comp = new Comparator<Map>(){ 
      public int compare(Map a,Map b){ 
       int aa=0,ba=0,as=0,bs=0; 
       try{ 
        aa = Integer.parseInt(""+a.get("activity")); 

       }catch(Exception ex){ 
       } 
       try{ 
        ba = Integer.parseInt(""+b.get("activity")); 
       }catch(Exception ex){ 
       } 
       try{ 
        as = Integer.parseInt(""+a.get("searchscore")); 

       }catch(Exception ex){ 
       } 
       try{ 
        bs = Integer.parseInt(""+b.get("searchscore")); 
       }catch(Exception ex){ 
       } 


       if(as>bs) 
        return -1; 
       else if(bs<as) 
        return 1; 
       else{ 
        if(aa>ba) 
         return -1; 
        else if(aa<ba) 
         return 1; 
        else 
         return 0; 
       } 

      } 
      public boolean equals(Object o){ 
       return o==this; 
      } 
     }; 
     Collections.sort(l,comp); 
    } 
+5

不要使用空的catch塊。 –

+0

爲什麼不呢?我真的不想對異常做任何事情,當searchscore或activity爲null時,它會被拋出。 – Seppo420

+0

在網上搜索。也可以看看這裏。 http://stackoverflow.com/questions/1234343/why-are-empty-catch-blocks-a-bad-idea –

回答

5
if(as>bs) 
    return -1; 
else if(bs<as) 
    return 1; 

as>bsbs<as意思完全一樣的東西。您可能的意思是:

if(as<bs) 
    return -1; 
else if(as>bs) 
    return 1; 
+0

argh ...我怎麼想那個。謝謝 – Seppo420

相關問題