2013-01-21 79 views
0

我有我的用戶定義類的列表。比較在Arraylist

class Customer{ 
    Integer age; 
    String name; 
    //getter & setter 
} 


Collections.sort(customerList, new Comparator <Customer>() {   
    public int compare(Customer o1, Customer o2) { 
    // TODO Auto-generated method stub    
    if(o1.getAge()!=null && o2.getAge() != null) 
     return o1.getDistance().compareTo(o2.getDistance()); 
    else 
     return 1; 
    } 
}); 

現在我的年齡可變可能有值或年齡客戶的。所有null值應該是追加在最後,其餘的值應該排序在升序或降序(任何事都可以)?

但是這個代碼是拋出異常:

java.lang.IllegalArgumentException: Comparison method violates its general contract! 

請告訴我該怎麼辦? 在此先感謝。

+1

全堆棧跟蹤請... – Andremoniy

+0

看看http://stackoverflow.com/questions/8327514/comparison-method-violates-其一般合同 – cubbuk

回答

3

當且僅當c.compare(e1,e2)== 0具有與e1.equals相同的布爾值時,由比較器c對一組元素S施加的順序被認爲與等於一致(E2)爲>在S.

每e1和e2

價 - link

元組必須一致。不一致的平等會表現得很糟糕。

+0

我明白這一點,但最新的解決方案........... –

1

如果只有一個顧客有年齡而另一個顧客沒有年齡,那麼你不能正確處理這些情況。

此外,在其他情況下返回1似乎是不正確的。如果根據年齡沒有差異,則返回0而不是1.