자바에 리스트 내부 중복된 원소 지우는 두가지 방법
```
자바에서 리스트 내부에 중복된 값 지우는 방법
```

이번 글을 통해 배워갈 내용
1. 명령형 방법 (Imperative method)
2. 선언형 방법 (declarative method)
명령형은 한 단어로 정의하면 HOW입니다.
아래와 같이 리스트를 받아서 무엇을 어떻게 해야 되는지 하나하나 알려줍니다.
아래 코드를 보고 명령을 알 수 있습니다.
(리스트 내부를 하나씩 돌면서 반환할 리스트가 가지고 있지 않으면 추가한다.)
(for each element in list if returnList does not contains the element, add element then return element. )
public <T> List<T> imperativeStyleDistinct(List<T> inputList) {
List<T> retList = new ArrayList<>();
for (T val : inputList)
if (!retList.contains(val)) {
retList.add(val);
}
return retList;
}
반면 선언형은 What입니다.
구체적으로 어떻게 할지는 안 알려 주지만
stream으로 흐르듯 데이터를 봐서 중복되지 않는 녀석들만 골라서 리스트로 바꿔서 반환해라입니다.
(stream inputlist and collect distinct data as list)
public <T> List<T> declarativeStyleDistinct(List<T> inputList) {
return inputList.stream().distinct().collect(Collectors.toList());
}
선언형은 한마디로 꿀입니다.
가독성이 높고
재사용성이 좋으며
유지보수하기도 편합니다.
전체 코드는 아래와 같습니다.
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Distinct01 {
public <T> List<T> imperativeStyleDistinct(List<T> inputList) {
List<T> retList = new ArrayList<>();
for (T val : inputList)
if (!retList.contains(val)) {
retList.add(val);
}
return retList;
}
public <T> List<T> declarativeStyleDistinct(List<T> inputList) {
return inputList.stream().distinct().collect(Collectors.toList());
}
}
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
Distinct01 distinct01 = new Distinct01();
List<Integer> integers = Arrays.asList(1,2,3,4,5,1,2,3,4,5,6,7);
System.out.println(distinct01.imperativeStyleDistinct(integers));
System.out.println(distinct01.declarativeStyleDistinct(integers));
List<Double> doubles = Arrays.asList(1.0,2.0,3.0,4.0,5.0,6.0,7.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0);
System.out.println(distinct01.imperativeStyleDistinct(doubles));
System.out.println(distinct01.declarativeStyleDistinct(doubles));
List<String> strings = Arrays.asList("K1","K1","K2","K2","K2","K3","K3","K4","K4","K4");
System.out.println(distinct01.imperativeStyleDistinct(strings));
System.out.println(distinct01.declarativeStyleDistinct(strings));
}
}
결괏값
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
[K1, K2, K3, K4]
[K1, K2, K3, K4]
참조
https://stackoverflow.com/questions/1019854/java-distinct-list-of-objects
Java - Distinct List of Objects
I have a list/collection of objects that may or may not have the same property values. What's the easiest way to get a distinct list of the objects with equal properties? Is one collection type best
stackoverflow.com
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)