2011-09-12 11 views
1

私は自分自身のクラスを持っています。そのクラスは、その内部に他のオブジェクトのセットを持つオブジェクトです。私は曲線の2つのコレクションを持っていたときに私の質問は、どのように私がチェックするためにこれらを比較しないさJava独自のオブジェクトと.equalsのコレクション

public class CurvePoint implements ICurvePoint, Comparable<CurvePoint> { 

@Override 
    public int compareTo(CurvePointother) { 

     return getSnapDate().compareTo(other.getSnapDate()); 

    } 
@Override 
    public boolean equals(Object other) { 
     if (other instanceof CurvePoint) { 
      CurvePointotherPoint = (CurvePoint) other; 

      return (getId().equals(otherPoint.getId()) 
        && getBid().getRate() == otherPoint.getBid().getRate() 
        && getOffer().getRate() == otherPoint.getOffer().getRate() && getMid() 
        .getRate() == otherPoint.getMid().getRate()); 
     } 
     return false; 
    } 

} 

public class Curve{ 


@Override 
public Collection<CurvePoint> getCurvePoints() { 
return curvePoints; 
} 

@Override 
public boolean equals(Object other) { 
    if (other instanceof Curve) { 
     Curve otherCurve = (Curve) other; 
     return getCurvePoints().equals(otherCurve.getCurvePoints()); 
    } 
    return false; 
}   
} 

CurvePointクラスimplments匹敵するともそのようなequalsメソッドをオーバーライドするすなわち 彼らが等しいならば?私が.equalsを使うとき、常にfalseを返すだけです。両方のコレクションをループせずにそれを行う方法はありますか?

+1

equals()標準コレクションの実装は、常にすべての子を比較します。他のすべてはひどいです –

答えて

0

コレクションを比較する場合、コレクションにはコレクションに適したインターフェイスが必要です。

基本的には可能ですが、現在のコレクションが好きなように比較を実装していない場合は、そのコレクションをサブクラス化してメソッドcompareTo(...)equals(...)をオーバーライドする必要があります。

+0

基本的には私のカーブポイントで私のソートされたセットの日付に従ってソートされたかったので、私はcurvePointでcompareTo()メソッドをオーバーライドしました。コレクションの.equalsは、それがループし、.compareToを呼び出す場所で、どこで.equalsを使用したいのかと思います。これを行う方法はありますか? – Twinhelix

0

CurvePointのコード全体を表示していないので、getBid()。getRate()と同様に、Wrapperオブジェクトではなく、プリミティブが返されますか? equals()の代わりに==を比較するためです。

+0

ええ、彼らは倍です – Twinhelix

関連する問題