Java에서 컬렉션의 중복을 제거하는 방법
주의
이 문건은 과거 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과 비교하여 다양한 것이 추가되고 변경이 되었습니다.
이 중 Stream의 distinct() 메서드를 활용하여 중복을 제거할 수 있게 되었습니다.
List result1 = intList.stream().distinct().collect(Collectors.toList());
List result2 = strList.stream().distinct().collect(Collectors.toList());
stream의 **distinct()**를 사용하게 되면 중복된 값을 제거하게 됩니다.
그리고 **collect()**를 통해 List로 반환하게 되면 아주 깔끔하게 처리할 수 있게 됩니다.
결론…Java8!
개인적으로 Step2 방법으로 컬렉션의 중복자료를 제거하는 방법을 사용하는게 좋은 것 같습니다.
이런 비슷한 고민을 하시는 분들에게 좋은 자료가 되었으면 합니다.
요새 오픈소스 및 회사 업무를 진행하느라 바쁘지만…꾸준히 포스팅을 다시 해보도록 하겠습니다!
추운데 감기 조심하시고, 방문해주셔서 감사합니다!
![/static/29a05fefb322c94d5eb3f7d05c7c224e/myc_icon.png](/static/29a05fefb322c94d5eb3f7d05c7c224e/2326b/myc_icon.png)
![/static/d35d260fd4813f4a6d284a7f4fbcdf49/bcow_icon.png](/static/d35d260fd4813f4a6d284a7f4fbcdf49/2326b/bcow_icon.png)