Java에서 컬렉션의 중복을 제거하는 방법

Posted by , February 11, 2018
Java
Series ofJava

주의

이 문건은 과거 Hexo 블로그 (2018-02-11) 에서 이동된 문서입니다.

시간이 지남에 따라 최신 기술과 다를 수 있으니 주의 바랍니다.



너무 오랜만의 포스팅??

간만에 작성을 하는 포스팅입니다.

요새 너무 정신없이 바빠져서 포스팅을 할 기회가 없었습니다.

계속 포스팅을 꾸준하게 해야 하지만...노오력을 해야 겠네요 ㅠ

근황은 근화이고 포스팅은 해야겠죠?

Java에서 컬렉션에서 중복 제거

요새 Java 개발에 빠져서 허우적 중인데 개발을 하다 보면 데이터를 컬렉션에 담아서 처리하는 경우가 많습니다.

그리고 그 컬렉션에 중복된 데이터가 발생하는 문제가 있었는데 이런 문제를 해결하기 위한 방법을 알아보겠습니다.

먼저 예를 위해서 아래의 컬렉션을 사용하도록 하겠습니다.

List<Integer> intList = Arrays.asList(1,2,3,4,5,5,2,1,5);
List<String> strList = Arrays.asList("abc", "222", "123", "222", "123", "abc");

최종 결과는 다음과 같이 나오게 됩니다.

intList = [1, 2, 3, 4, 5]
strList = [222, 123, abc]

Step 1. HashSet을 사용하여 중복 제거하기

Java의 컬렉션 중 Set 컬렉션 중 하나인 HashSet을 통해서 제거하는 방법입니다.

List result1 = new ArrayList(new HashSet(intList));
List result2 = new ArrayList(new HashSet(strList));

중복된 컬렉션을 HashSet에 넣게 되면 Set 컬렉션 특성 상 중복된 자료는 제거됩니다.
이렇게 중복된 결과를 다시 ArrayList로 넣게 되면 중복된 자료는 사라지게 됩니다.

하지만 이 방법은 썩 좋은 방법은 아닌 것 같습니다.
기존 중복된 자료형을 HashSet으로 변경 후 다시 ArrayList로 변경하는 것은 부담이 됩니다.


Step 2. Java8의 Stream을 사용하기

Java8은 7과 비교하여 다양한 것이 추가되고 변경이 되었습니다.
이 중 Streamdistinct() 메서드를 활용하여 중복을 제거할 수 있게 되었습니다.

List result1 = intList.stream().distinct().collect(Collectors.toList());
List result2 = strList.stream().distinct().collect(Collectors.toList());

stream의 **distinct()**를 사용하게 되면 중복된 값을 제거하게 됩니다.
그리고 **collect()**를 통해 List로 반환하게 되면 아주 깔끔하게 처리할 수 있게 됩니다.


결론...Java8!

개인적으로 Step2 방법으로 컬렉션의 중복자료를 제거하는 방법을 사용하는게 좋은 것 같습니다.

이런 비슷한 고민을 하시는 분들에게 좋은 자료가 되었으면 합니다.
요새 오픈소스 및 회사 업무를 진행하느라 바쁘지만...꾸준히 포스팅을 다시 해보도록 하겠습니다!

추운데 감기 조심하시고, 방문해주셔서 감사합니다!