Map Key값으로 정렬하기

홍석균·2021년 4월 5일
0
 @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()) //key값으로 정렬
             .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 
-> 맵 구현체 //여기서는 TreeMap, 순서를 보장하는 Map 사용
 
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);
profile
홍석균

0개의 댓글