Java的Comparable接口提供一个对实现了这个接口的对象列表进行排序的办法。原始的排序对于简单的对象来说具有意义,但是当我们面对复杂的面向对象的业务逻辑对象时,事情变得复杂的多。从业务经理的角度来看,一些交易对象的自然顺序可能是按照交易的价值来排序的,但是从系统管理员的角度来看,这个排序的规则可能是交易的速度。所以在大多数情况下,并没有明确的业务领域对象的自然排序规则。假设我们找到了一个需要排序的类,比如说Campany。我们把公司的offical name作为主关键字,把id作为次要关键字。这个类的实现如下:public class Company implements Comparable<Company> {
private final String id; private final String officialName;
public Company(final String id, final String officialName) { this.id = id; this.officialName = officialName; }
public String getId() { return id; }
public String getOfficialName() { return officialName; }
@Override public int hashCode() { HashCodeBuilder builder = new HashCodeBuilder(17, 29); builder.append(this.getId()); builder.append(this.getOfficialName()); return builder.toHashCode(); }
@Override public boolean equals(final Object obj) { if (obj == this) { return true; } if (!(obj instanceof Company)) { return false; } Company other = (Company) obj; EqualsBuilder builder = new EqualsBuilder(); builder.append(this.getId(), other.getId()); builder.append(this.getOfficialName(), other.getOfficialName()); return builder.isEquals(); }
@Override public int compareTo(final Company obj) { CompareToBuilder builder = new CompareToBuilder(); builder.append(this.getOfficialName(), obj.getOfficialName()); builder.append(this.getId(), obj.getId()); return builder.toComparison(); } }