Skip to content

Latest commit

 

History

History
21 lines (19 loc) · 900 Bytes

중복된 키값제거.md

File metadata and controls

21 lines (19 loc) · 900 Bytes

중복된 키값 제거

List<xxxVo> employees = employeeInfoService.findEmployeeInfos(searchVo).stream()
                                         .filter(distinctByKey(emp -> emp.getAdminEmployeeInfoSeq()))
                                         .collect(Collectors.toList());

/**
 * 키값 중복 제거를 위한 함수
 * - putIfAbsent : key 값이 없다면 입력 된 key 와 value 를 입력, 해당 key 가 존재하면 입력 되었던 값 반환
 * - 키와 연관된 이전 값 또는 키에 대한 맵핑이 없는 경우 널
 * - 따라서 t가 맵에 존재하지 않는 객체만 반환
 * @param keyExtractor
 * @param <T>
 * @return
 */
private static <T> Predicate<T> distinctByKey(Function<? super T,Object> keyExtractor) {
    Map<Object,Boolean> seen = new ConcurrentHashMap<>();
    return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}