꾸준히 기록하자
[Java] distinct() 본문
728x90
먼저 distinct()를 설명하기 전에 저는 중복된 값이 포함될 수 있는 List에 중복이 있는지 확인하고 있으면 중복된 값을 반환해줘야 하는 코드를 작성해야 했었습니다. 그래서 어떤 식으로 코드를 작성할까 방법 찾다 보니 stream()에서 제공하는 distinct() 메서드를 알게 되어서 글을 쓰게 되었습니다.
distinct() 외 다른 방법으로도 코드를 작성할 수 있겠지만 저는 distinct()를 사용하여 작성하는 게 간결할 거 같았습니다.
코드 블록에 작성했었던 예제 코드를 구현해보겠습니다.
List<String> list = new ArrayList<String>();
list.add("짱구");
list.add("짱구");
list.add("철수");
list.add("철수");
list.add("맹구");
list.add("철수");
if (list.stream().distinct().count() != list.size()) {
List<String> dpcnRemoveList = list.stream().distinct().collect(Collectors.toList());
for (String value : dpcnRemoveList) {
list.remove(value);
}
String dpcnName = String.valueOf(new HashSet<String>(list));
System.out.println(dpcnName);
// 결과: [철수, 짱구]
}
아래 코드 블록은 위 코드 블록에 대한 설명을 작성했습니다.
List<String> list = new ArrayList<String>();
list.add("짱구");
list.add("짱구");
list.add("철수");
list.add("철수");
list.add("맹구");
list.add("철수");
System.out.println(list.size()); // 결과: 6
System.out.println(list.stream().distinct().count()); // 결과: 3
// list에 중복된 값이 있으면 distinct().count()와 list.size의 값이 다릅니다.
if (list.stream().distinct().count() != list.size()) {
// distinct()한 값을 collect(Collectors.toList())를 통해 새로운 컬렉션에 수집해 담습니다.
List<String> dpcnRemoveList = list.stream().distinct().collect(Collectors.toList());
System.out.println(dpcnRemoveList);
// 결과: [짱구, 철수, 맹구]
// dpcnRemoveList을 통해 list을 remove()하여 제거합니다.
for (String value : dpcnRemoveList) {
list.remove(value);
}
System.out.println(list);
// 결과: [짱구, 철수, 철수]
// 제거해도 남아 있는 값을 hashSet을 통해 중복을 제거합니다.
String dpcnName = String.valueOf(new HashSet<String>(list));
// 중복 값을 확인합니다.
System.out.println(dpcnName);
// 결과: [철수, 짱구]
}
* HashSet은 중복을 허용하지 않고 순서도 보장하지 않습니다.
distinct()를 간략하게 설명하면 stream()의 메서드들 중에 중복을 제거해 새로운 stream으로 반환해 주는 메서드입니다.
* stream()은 Java 8부터 지원하는 기능입니다.
* 스트림은 재사용이 불가능해 한번 정의해서 사용할 수 없습니다.
끝.
반응형
'IT > Java' 카테고리의 다른 글
[Java] Call by Value & Reference (0) | 2023.01.15 |
---|---|
[Java] Good Coding (PMD) (0) | 2022.12.27 |
[Java] Iterator() (0) | 2022.11.02 |
[Java] StringUtils.equals() (0) | 2022.09.15 |
[Java] contains() (0) | 2022.06.30 |
Comments