자바 1.8을 활용한 데이터 중복제거 방법 입니다.
List가 포함하는 데이터는 HashMap으로 하였습니다.
물론, 사용자가 만든 vo 객체를 사용해도 무방하며, 일반 String, Integer, float, char 등 다른 자료형태도 가능합니다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class FunctionTest {
public static void main(String[] args) {
List<HashMap<Object, Object>> list = new ArrayList<HashMap<Object,Object>>();
HashMap<Object, Object> item = new HashMap<Object, Object>();
item.put("day", "2019-08-06");
item.put("name", "hello");
item.put("data", "1234");
list.add(item);
item = new HashMap<Object, Object>();
item.put("day", "2019-08-07");
item.put("name", "good");
item.put("data", "1234");
list.add(item);
item = new HashMap<Object, Object>();
item.put("day", "2019-08-08");
item.put("name", "hello");
item.put("data", "1010");
list.add(item);
List<HashMap<Object, Object>> result = distinctArray(list, "name");
result.forEach(System.out::println);
}
//중복제거 메소드, key는 제거할 맵 대상
public static List<HashMap<Object, Object>> distinctArray(List<HashMap<Object, Object>> target, Object key){
if(target != null){
target = target.stream().filter(distinctByKey(o-> o.get(key))).collect(Collectors.toList());
}
return target;
}
//중복 제거를 위한 함수
public 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;
}
}
일반 stream 객체를 가져오면 단순하게 distinct만 존재 합니다.
해당 메소드는 데이터 형태를 전부 비교해서 제거하기 때문에 위 내용처럼 Map형태로 된 특정 값을 기준으로 제거하는 경우에는 동작하지가 않습니다.
따라서 위 코드처럼 함수식을 활용하면 데이터들 제거할 수 있습니다.
물론 1.8 이하 버전에서는 당연히 동작하지 않습니다.
반응형
'Java(자바)' 카테고리의 다른 글
JAVA 반복문 속도 테스트(Java loop speed test, Java stream 속도) (2) | 2019.09.20 |
---|---|
자바 Soap 클라이언트 간단하게 구현하기 (0) | 2019.09.02 |
Java Files 클래스를 통한 파일 읽기(lines, read, newBufferedReader, readAllLines) (0) | 2019.07.25 |
Java로 해보는 then 형태의 메소드 (0) | 2019.07.25 |
Java UnsupportedOperationException, unmodifiableList (0) | 2019.07.19 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글