Anyway

[JAVA] HashSet을 이용하여 list 중복값 제거하기 본문

Java

[JAVA] HashSet을 이용하여 list 중복값 제거하기

dyana 2024. 9. 24. 11:31
        Set<Long> seqNoList = new HashSet(seqNoListForCheck);

        List<Long> newSeqNoList = new ArrayList<Long>(seqNoList);

⚠️ 클라이언트로부터 두 가지의 list를 전달받는데 하나의 list로 합쳐 중복값을 제거해야 했다. 

 

        List<Long> seqNoListForCheck = new ArrayList();
        for(Long seqNo : reqDto.getFinalSeqNoList()) {
            seqNoListForCheck.add(seqNo);
        }
        for(SeqNoUseYn seqNo : reqDto.getSeqNoUseYnList()) {
            seqNoListForCheck.add(seqNo.getSeqNoList());
        }

 

합친 리스트를 가지고 중복값을 제거하는 여러 방법 중 HashSet 방법을 선택했다. 이유는 더 간단했기 때문 .. 

set은 본래 중복을 허용하지 않는 객체로 List를 set으로 변경하면 중복이 제거된다. 

 

기존 각각의 list에 {1,2,3} {2,3,4}를 넣고 list에 합쳤을 땐 size가 6이었는데 set에 넣고 list로 옮긴 결과 {1,2,3,4}로 예쁘게 중복이 제거 되었다. 

 

그렇지만 for문도 두 개고 뭔가 더 간단하고 나은 방법이 없나 다시 생각해보았다. 

 

 

finalSeqNoList 값은 원래 숫자들의 list인지라 그냥 뭉땅 넣어줬다.

문제는 seqNoUseYnList였다. 이 친구는 숫자들의 list가 아니라 객체의 list였다. 객체 중에서도 숫자 필드들만 꺼내서 넣어줘야 하는 상황. 이 부분은 기존대로 for문을 돌리기로 했다. 

        Set<Long> mergedSet = new HashSet<>(reqDto.getFinalSeqNoList());
        for(SeqNoUseYn seqNo : reqDto.getSeqNoUseYnList()) {
            mergedSet.addAll(Collections.singleton(seqNo.getSeqNoList()));
        }
        List<Long> seqNoList = new ArrayList<Long>(mergedSet);

 

보다 간단해져 마음에 들었다! 🤭

최대한 최적화되게 짜고 싶은데 .. 아직은 너모 쉽지 않다 .. 

'Java' 카테고리의 다른 글

[JAVA] anyMatch 메서드 사용하기  (0) 2024.11.13
[JAVA] Enum Type XML에서 if문 작성하기  (1) 2024.11.05
[JAVA] list null체크 또는 isEmpty()  (1) 2024.09.27