2011-09-12 2 views
1

내 안에는 다른 개체가 포함 된 개체가 있습니다. CurvePoint 클래스 implments 대등는 equals 메소드과 같이 우선 즉Java 자신의 개체 및 .equals 컬렉션

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; 
}   
} 

:

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; 
    } 

} 

나는, 곡선의 2 명 컬렉션을 때 내 질문에 내가 확인하려면 다음을 비교합니까 어떻게 그들이 동등하다면? .equals를 사용할 때 항상 false를 반환합니다. 두 컬렉션 모두를 반복하지 않고 수행하는 방법이 있습니까?

+1

아니요. 표준 콜렉션의 equals() 구현은 항상 모든 자식을 비교합니다. 다른 모든 것은 끔찍합니다. –

답변

0

컬렉션을 비교하는 경우 컬렉션에는 컬렉션에 적합한 인터페이스가 있어야합니다.

기본적으로 가능하지만 현재 컬렉션이 원하는대로 비교를 구현하지 않으면 해당 컬렉션을 서브 클래스 화하고 compareTo(...)equals(...) 메서드를 재정의해야합니다.

+0

기본적으로 커브의 정렬 된 집합에 날짜별로 정렬되기를 원하기 때문에 내 curvePoint에서 compareTo() 메서드를 재정의했습니다. 그리고 콜렉션의 .equals가 무엇을하는지 생각해 보면, 그것이 .equals를 사용하기 원하는 곳에서 .compareTo를 호출하고 호출합니다. 이것을 할 수있는 방법이 있습니까? – Twinhelix

0

CurvePoint 코드 전체를 표시하지 않으므로 getBid(). getRate() 비슷하게 래퍼 객체가 아닌 프리미티브가 반환됩니다. equals() 대신에 ==를 비교하기 때문입니다.

+0

예, 그들은 복식입니다. – Twinhelix

관련 문제