2012-02-06 89 views
9

我瞭解了有關Comparable接口,爲此,一個類必須實現compareTo方法。org.apache.commons.lang.builder.CompareToBuilder到底做了什麼?

public class EmployeeAssignmentTotal implements Comparable<EmployeeAssignmentTotal>, Serializable { 

private Employee employee; 
private int total; 
.... 
public int compareTo(EmployeeAssignmentTotal other) { 
    return new CompareToBuilder() 
      .append(employee, other.employee) 
      .append(total, other.total) 
      .toComparison(); 
} 

exacly不CompareToBuilder在這裏做什麼:我使用的方法,一個項目?它是如何與employeetotal屬性進行交互的?


我看過the javadocs,但我不能讓他們與構造函數和多append做什麼頭部或尾部。這個問題是否表明不明確的意圖和零研究?

+3

Javadoc(http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/builder/CompareToBuilder.html)在某些方面不清楚嗎? – skaffman 2012-02-06 14:15:30

+2

在很多方面還不清楚。特別是如何計算結果Integer或附加序列如何影響返回值。 – 2012-12-07 15:16:33

+2

我發現這個非常翔實的文章 - http://www.codejava.net/java-core/collections/sorting-a-list-by-multiple-attributes-example – Shatu 2014-12-22 14:37:44

回答

4

本課程旨在幫助您構建compareTo()-方法。想象一下,你的班級中不僅有2個字段 - 手動編寫你的比較方法可能非常麻煩。

CompareToBuilder正在爲您做這件事 - 每個append()方法都增加了一個新的比較,並且所有的比較都是&& ed。

因此,您發佈的代碼在員工對象上運行equals(),而在total上運行的代碼爲equals()

10

我想弄清楚CompareToBuilder是如何工作的,而且我遇到了這篇文章,但我並不滿意答案。例如,toComparison方法應該返回一個負整數,一個正整數或零,因爲構建器已經判斷「左側」小於,大於或等於「右側」。

所以我的問題是附加屬性的順序如何影響比較。要回答這個問題,我能做的唯一的事情就是檢查源代碼,我發現這一點:

public CompareToBuilder append(int lhs, int rhs) { 
    if (this.comparison != 0) { 
     return this; 
    } 
    this.comparison = ((lhs > rhs) ? 1 : (lhs < rhs) ? -1 : 0); 
    return this; 
} 

所以,基本上所發生的事情是,它會根據比較,你追加的順序上的屬性。在您的代碼示例中,將首先評估「員工」。如果左側屬性的評估值小於或大於右側,則總數將被忽略。

僅當「員工」評估等於時,纔會評估屬性「總計」。

相關問題