반응형
자주 필요해서 정리해 놓으려고 한다!
우선 제네릭과 람다를 잘 몰라서.. 공부를 해야겠다...ㅠ
상황 : Object list에서 Grouping 할 수 있는 컬럼을 기준으로 중복을 제거하려고 한다.
보통 이런상황에서는 for문을 여러번 돌려서 사용했다.
하지만 매번 for문을 돌리거나 특정 컬럼을 기준으로 쿼리를 뽑아와서 사용하기에는, 같은 상황이 몇번 발생한다..
그래서 다같이 편할 수 있도록 Util을 만들어놓고 사용하고자 하여 조사를 해보았다.
해결 :
1). pom .xml
=> 기존 aspectj Version을 1.6.x 대를 사용했다.
하지만 하위 에러 발생.
Error Code : error : org.aspectj.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 18
원인은 aspectj Version이 낮아서 였다. 그래서 1.8대로 Version up.
2). Util
public class ArrayListUtils {
/**
* @param list 중복이 있는 list
* @param key 중복 여부를 판단하는 키값
* @param <T> generic type
* @return list
* @desc list<Object> 특정 값 기준 중복 제거
*/
public static <T> List<T> deduplication(final ArrayList<T> list, Function<? super T, ?> key) {
return list.stream()
.filter(deduplication(key))
.collect(Collectors.toList());
}
private static <T> Predicate<T> deduplication(Function<? super T, ?> key) {
final Set<Object> set = ConcurrentHashMap.newKeySet();
return predicate -> set.add(key.apply(predicate));
}
}
3). 사용처
ArrayListUtils.deduplication(List , Vo입력 ::중복 제거할 key의 get메소드);
자주 쓸일이 있을테니..! 확인!
제대로 이해하기 위해 제네릭과 람다를 공부해야겠다...
오늘도 화이팅!
반응형
'Java > Basic' 카테고리의 다른 글
[Java-Basic] 함수형 인터페이스 (Functional Interface) 예제 (0) | 2021.05.31 |
---|---|
[Java-Basic] Comparator과 Comparable을 사용한 배열 정렬 (0) | 2021.05.27 |
[Java-Basic] Java 정규표현식 (0) | 2021.05.24 |
[Java-Basic] JVM 메모리구조 및 개념 (0) | 2021.05.21 |
[Java-Basic] Reflection API 편리하게 사용하여 Vert.x Verticle 사용하기 (0) | 2021.04.23 |