@Test
@DisplayName("MAP KEY로 정렬하기")
void sort_map_by_key(){
Map<String,Object> map = new HashMap<>();
map.put("2021-03-05",1);
map.put("2021-01-02",2);
map.put("2021-04-15",100);
map.put("2021-02-20",5);
map.put("2021-03-01",3);
map.put("2021-04-30",10);
System.out.println("############## 정렬전 ####################");
map.entrySet().forEach(System.out::println);
Map<String, Object> sortedMap = map.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (o1, o2) -> o1, TreeMap::new));
System.out.println("############## 정렬후 ####################");
sortedMap.entrySet().forEach(System.out::println);
}
# Collectors.toMap
mergeFunction
-> key값이 중복될 경우 IllegalStateException 발생하므로 기존 값과 새로운 값중 선택하는 함수전달
mapFactory
-> 맵 구현체
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> mapFactory) {
BiConsumer<M, T> accumulator = (map, element) -> map.merge(keyMapper.apply(element),
valueMapper.apply(element), mergeFunction);
return new CollectorImpl<>(mapFactory, accumulator, mapMerger(mergeFunction), CH_ID);