List<Mall> mallList = new ArrayList<>();
List<GetLoansLimitMallResponseDto.MallDataProviderInfo> mallDataProviderList = Stream.concat(
responseGetSettlementScheduledForAllMalls.stream()
.map(item -> MallDataProviderInfo.builder()
.mallSeq(item.getMallSeq())
.mallName(item.getMallName())
.mallAccountId(item.getMallAccountId())
.dataProviderSeq(item.getDataProviderSeq())
.dataProviderName(item.getDataProviderName())
.build()),
responseGetAllMallsSalesInfo.stream()
.map(item -> MallDataProviderInfo.builder()
.mallSeq(item.getMallSeq())
.mallName(item.getMallName())
.mallAccountId(item.getMallAccountId())
.dataProviderSeq(item.getDataProviderSeq())
.dataProviderName(item.getDataProviderName())
.build())
)
.distinct()
.collect(Collectors.toList());
Stream.distinct()메서드를 이용하면 중복된 값을 제거해준다고 하는데 ,mallSeq,mallName,mallAccountId가 중복된 데이터들이 리스트에 보여져서 해결 방안 찾기 시작했다... 🖥️
Stream.distinct() 메서드Stream의중간 연산equals()와 hashCode() 메서드를 통해 판단한다.distinct()를 사용할 equals()와 hashCode()를 오버라이드하여 재정의해야 한다.equals() 메소드String 타입의 변수를 비교// 출처: https://inpa.tistory.com/entry/JAVA-☕-equals-hashCode-메서드-개념-활용-파헤치기 [Inpa Dev 👨💻:티스토리]
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // 주소 비교 false
System.out.println(s1.equals(s2)); // 값 비교 true
Person person1 = new Person("홍길동");
Person person2 = new Person("홍길동");
System.out.println(person1 == person2); // == 은 객체타입인경우 주소값을 비교한다. 서로다른 객체는 다른 주소를 가지고 있기 때문에 false가 출력됨
System.out.println(person1.equals(person2)) // equals또한 객체타입인경우 주소값을 비교하기 때문에 false가 출력된다.
hashCode() 메소드(hashing) 기법을 통해 해시 코드를 만든 후 반환한다.✨📗엄밀히 말하면 해시코드는 주소값은 아니고, 주소값으로 만든 고유한 숫자값이다..
// 출처: https://inpa.tistory.com/entry/JAVA-☕-equals-hashCode-메서드-개념-활용-파헤치기 [Inpa Dev 👨💻:티스토리]
Person p1 = new Person("홍길동");
Person p2 = new Person("홍길동");
// 객체 인스턴스마다 각기 다른 주해시코드(주소))를 가지고 있다.
System.out.println(p1.hashCode()); // 622488023
System.out.println(p2.hashCode()); // 1933863327
equals, hashCode 자동 생성해주는 어노테이션
@Getter
@Builder
@EqualsAndHashCode(of = "mallSeq") // 중복 기준
public class MallInfo {
private Long mallSeq;
private String mallName;
private String mallAccountId;
}
List<GetLoansLimitMallResponseDto.MallInfo> mallList = Stream.concat(
responseGetSettlementScheduledForAllMalls.stream()
.map(item -> GetLoansLimitMallResponseDto.MallInfo.builder()
.mallSeq(item.getMallSeq())
.mallName(item.getMallName())
.mallAccountId(item.getMallAccountId())
.build()),
responseGetAllMallsSalesInfo.stream()
.map(item -> GetLoansLimitMallResponseDto.MallInfo.builder()
.mallSeq(item.getMallSeq())
.mallName(item.getMallName())
.mallAccountId(item.getMallAccountId())
.build())
)
.distinct() // equals/hashCode 기준으로만 동작함
.collect(Collectors.toList());
Lombok @Data의 @EqualsAndHashCode이 뭐하는 애일까?
[Stream API] 중간 연산 - distinct 메서드
[Java] - Stream API ③ distinct()로 중복 요소 제거하기
☕ 자바 equals / hashCode 오버라이딩 - 완벽 이해하기