Wrapper 클래스 원시값 contains 사용
yeoseon opened this issue · comments
Yun Yeoseon (Row) commented
원시값을 감싸서 일급콜렉션 형태로 사용을 했다.
이 일급콜렉션에 대해 원시값이 서로 같은지 비교를 하려면 어떡해야 하는지에서 많이 막혔다.
처음에는 getValue원시값 을 하나 구현해서 했더니 불필요한 메소드 생성이었다.
찾아보고 직접 해결해보자.
해결 내용
값으로 비교하기 위해서는 equals 를 오버라이드 하시면 됩니다.
이해가 잘 안갔었는데, 아래 참고자료를 보고 알았다.
Wrapper 객체의 contains는 equals를 기반으로 비교하기 때문이라는 것을 이해했다.
다음과 같이 해결했다.
- Lotto.java
- List 와 LottoNumber 사이의 contains 사용
public long getMatchedNumberCount(Lotto winningLotto) {
return winningLotto
.getValue()
.stream()
.filter(winningLottoNumber -> lotto.contains(winningLottoNumber))
.count();
}
- LottoNumber.java
- 다음과 같이 오버라이딩함.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LottoNumber that = (LottoNumber) o;
return lottoNumber == that.lottoNumber;
}
@Override
public int hashCode() {
return Objects.hash(lottoNumber);
}
- equals 메소드를 오버라이딩 하여 원시값을 비교해오도록 수정하니, contains를 사용해도 잘 동작했다.
이렇게 쉽게 해결할 기본적인 것을.. 5시간 넘게 고민하다니 ㅠㅠ 그래도 하나 배웠다.