개발에서 중복되는 데이터를 제거하는 작업은 빈번하게 일어나게 되는데, 그때 어떤 방법을 이용해서 중복을 제거할 것 인가가 항상 고민이였다, 그래서 활용가능한 방법들을 간단하게나마 정리하려고 한다.
먼저 리스트안의 중복을 제거하는 방법은 몇 가지가 있는 것 같은데, 대표적으로 아래와 같은 방법이 있는 것 같다.
1. for문을 이용해 리스트를 순회하며 제거(contains를 이용 or 변수를 이용)
2. Set자료형을 이용하여 중복을 제거
3. Stream의 distinct를 이용하는 방법
이외에 다른 방법이 더 있을 수도 있겠지만, 당장 생각나는 방법만 정리하려고 한다. 백문이불여일견이라고, 코드를 통해 정리 하면 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// 클래스 선언부 생략
List<String> data = new ArrayList<>();
data.add("테스트");
data.add("테스트");
data.add("테스트2");
data.add("테스트3");
// for문을 이용해서 중복을 제거
List<String> result = new ArrayList<>();
for(String item : data) {
if(!result.contains(item)) result.add(item);
}
System.out.println(result);
// set자료형을 이용한 중복제거
HashSet<String> result = new HashSet<>();
for(String item : data) { // for문 이용
result.add(item);
}
result.addAll(data); // addAll로 간단하게
HashSet<String> result2 = new HashSet<>(data); // 더 간단하게
System.out.println(result2);
// JAVA 8 Stream의 distinct를 이용한 중복제거
List<String> result = data.stream().distinct().collect(Collectors.toList());
System.out.println(result);
|
cs |
크게 어려울만한 내용은 없어서 주석을 보면 이해가 갈 것 같고, set자료형 이용해 중복을 제거할 때에는 리스트안의 원소와 set자료형의 원소가 같아야 된다는 주의점이 있겠다.
이외에 더 좋은 방법이 있을까 고민해봤지만, 딱히 떠오르는 방법은 DB단에서 쿼리를 이용해 중복을 제거하는 방법도 있겠다만, 이 글은 JAVA에 대해서 정리하는 내용이니 다루지는 않겠다.
'JAVA' 카테고리의 다른 글
JAVA System.in에서의 EOF(End of File) 컨트롤 (0) | 2020.12.23 |
---|---|
JAVA 입력과 출력(Scanner, BufferedReader..) (0) | 2020.12.17 |
JAVA에서 ..parameter???? (가변인자) (0) | 2020.08.25 |
HttpResponse와 Unirest를 이용한 외부 데이터 요청 (0) | 2020.06.17 |
JAVA 문자열 자르기 2 (substring 사용법) (0) | 2020.06.02 |