2014-01-16 39 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

相关问题