java Map으로 정렬!
망할 db에서 데이터를 가져오려고하는데
db에서 정렬을 할수가없다..
데이터가 일정형식이 아니기 때문 어쩔수없이 데이터를 한방에 가져와서 자바에서
리스트 처리를 하게되는데~
처음엔 중복 처리를 하기위해서 HashMap을 썻다
중복이 걸러지고 아쥬 조았따
' _ ' 그치만 데이터가
2일 11일 3일 8 일 3일 4일
이런식으로 정렬이 되지않는것
앗 그럼 정렬이 되는 리스트를 쓰면되는것이 아닌가!
그래서 TreeMap으로 냅다 바꿧다
TreeMap은 Hash 맵처럼 키가 중복되는것을 방지하고 데이터를 집어 넣을때 정렬도 같이해준다
그런데 말입니다 10일 11일 2 일 3일 4 일 이렇게 나오는게 아닌가
TreeMAP의 Key값의 형태가 String이어서 그런거다......
Integer Key로 변경하여 완성!
String일때는 한글이면 가나다순으로 영어면 알파벳순으로 정렬을 해준다!
그런데말입니다 데이터가 <코드,한글데이터> '_ ' 엿던것이다 TreeMap은 Key를 위주로 정렬해준다.
그래서 나는 Value값과 Key값을 뒤집어서 맵에넣고 자동정렬을 해준뒤 (어차피 key와 value값이 1대1구조인 조건이라 가능했다.)
이것을 LinkedHASHMap에 집어 넣어 주었다 (리스트에 넣는 순서를 기억하고있는 Map)
LinkIedHash Map 에 데이터를 넣어줄때는
두가지 방법이있다.
한가진 아주 노멀하게 for문으로 때려 넣어주는 방식
LinkedHashMap lMap = new LinkedHashMap();
for (Map.Entrty<String, String> entry : treemap1.entrySet()){
lmap.put(entry.getValue(), entry.getKey());
}
한가진 스트림을 사용해봐주는 방식!
Map<String, String> emap = treeMap1.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getValue
,Map.Entry::getKey
,(oldValue, newValue) -> oldValue
,LinkedHashMap::new
));
ToMap에 파라미터 를 넘길때 toMap의 파라미터의 형태를 참고해보자
public static <T, K, U, M extends Map<K, U>>
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier) {
BiConsumer<M, T> accumulator
= (map, element) -> map.merge(keyMapper.apply(element),
valueMapper.apply(element), mergeFunction);
return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
}