less than 1 minute read

안녕하세요. 코딩하는 쿠가 입니다.

Stream API 의 distinct()를 많이 쓰실텐데, 다중 항목은 어떻게 해야 하는지 알아 보겠습니다.

Predicate를 이용한 다중 속성 중복 제거.


private static <T> Predicate<T> distinctByKeys(Function<? super T, ?>... keyExtractors) {
        final Map<List<?>, Boolean> seen = new ConcurrentHashMap<>();
        return t -> {
            final List<?> keys = Arrays.stream(keyExtractors)
                    .map(ke -> ke.apply(t))
                    .collect(Collectors.toList());
            return seen.putIfAbsent(keys, Boolean.TRUE) == null;
        };
    }
	
List<CareerCompanyVO> distinctCareer = Dictionary.careers.stream()
                .filter(x -> !filteringKeywords.contains(x.getCompany_nm()))
                .filter(distinctByKeys(CareerCompanyVO::getCompany_nm, CareerCompanyVO::getDept_nm))
                .collect(Collectors.toList());

회사 코드가 노출이 되긴 했는데 큰 문제 없어 보입니다.

이상입니다.