Notice
Recent Posts
Recent Comments
준호씨의 블로그
Java - distinct. 중복값 제거하기. 고윳값 구하기 본문
반응형
Java에서 List에 있는 값들 중 중복 값을 제거하는 방법을 알아보겠습니다. 고윳값을 구하는 방법입니다.
Set으로 변경하기
가장 쉬운 방법으로 Set으로 변경하는 방법입니다. Set은 중복을 허용하지 않기 때문에 List에 있는 값들을 Set으로 넣어 주면 중복 값을 쉽게 제거할 수 있습니다.
List<String> list = Arrays.asList("홍길동", "김삿갓", "홍길동", "김개똥");
HashSet<String> set = new HashSet<>();
for (String name : list) {
set.add(name);
}
for (String name : set) {
System.out.println(name);
}
결과
김삿갓
홍길동
김개똥
set.add를 하는 루프는 addAll 메서드 하나로 줄일 수 있습니다.
List<String> list = Arrays.asList("홍길동", "김삿갓", "홍길동", "김개똥");
HashSet<String> set = new HashSet<>();
set.addAll(list);
for (String name : set) {
System.out.println(name);
}
생성자에서 처리하면 한 줄 더 줄일 수 있습니다.
List<String> list = Arrays.asList("홍길동", "김삿갓", "홍길동", "김개똥");
HashSet<String> set = new HashSet<>(list);
for (String name : set) {
System.out.println(name);
}
출력은 forEach를 사용하면 더 줄 일 수 있습니다. forEach는 java8 이상에서 사용할 수 있습니다.
List<String> list = Arrays.asList("홍길동", "김삿갓", "홍길동", "김개똥");
HashSet<String> set = new HashSet<>(list);
set.forEach(System.out::println);
생성한 set과 출력문을 하나로 합칠 수 있습니다.
List<String> list = Arrays.asList("홍길동", "김삿갓", "홍길동", "김개똥");
new HashSet<>(list).forEach(System.out::println);
그런데 이 방법은 살짝 가독성이 떨어지는 느낌이라 별로 좋아 보이지는 않습니다.
guava
google guava 라이브러리로 list를 생성하고 set으로 변경하는 방법입니다.
Sets.newHashSet(Lists.newArrayList("홍길동", "김삿갓", "홍길동", "김개똥"))
.forEach(System.out::println);
결과
김삿갓
홍길동
김개똥
stream api
java8부터는 stream api를 이용할 수 있습니다. stream api에는 distinct라는 메서드를 제공하고 있습니다.
Arrays.asList("홍길동", "김삿갓", "홍길동", "김개똥").stream()
.distinct()
.forEach(System.out::println);
결과는 다음과 같습니다. set으로 했을 때와는 순서는 좀 다르게 나옵니다.
홍길동
김삿갓
김개똥
Arrays.asList(...). stream()는 Stream.of로 줄일 수 있습니다.
Stream.of("홍길동", "김삿갓", "홍길동", "김개똥")
.distinct()
.forEach(System.out::println);
reactor
reactor api를 사용한다면 Flux에 있는 distinct() 메서드를 이용할 수 있습니다.
Flux.just("홍길동", "김삿갓", "홍길동", "김개똥")
.distinct()
.doOnNext(System.out::println)
.subscribe();
결과는 다음과 같이 나옵니다.
홍길동
김삿갓
김개똥
반응형
'개발이야기' 카테고리의 다른 글
Java - OffsetDateTime 문자열 날짜 파싱 (0) | 2020.08.21 |
---|---|
Jackson - Json String Escape (0) | 2020.08.13 |
메시지 전달 서비스 프로젝트 작명하기 (0) | 2020.08.05 |
분산 메시징 시스템 카프카(Kafka)의 간단한 역사와 이름의 의미 (0) | 2020.08.03 |
Jackson Json - json name을 snake case로 바꾸기 (0) | 2020.08.01 |
Comments