티스토리 뷰

가끔 문제를 풀 경우, Map을 정렬하는 경우가 많다! Key에 관한 정렬은 TreeMap을 사용한다면 별도의 구현없이 정렬이 가능하다.

단, String, Integer 와 같은 기본형에만 해당된다. 만약 객체를 특정 인스턴스 변수 기준으로 정렬하고 싶다면, Comparable 을 이용한 정렬이 필요하다.

해당 객체를 생성하는 클래스에서 Comparable 인터페이스를 implements 하거나, 혹은 아래와 같은 방식으로 익명객체, 람다식을 활용할 수 있다.

하지만, 이번 예제에서는 Map의 Value에 대한 정렬을 해볼려고 한다. 정렬하는 방법을 익명객체와 람다식을 활용해서 구현했다.


            
package test;

import java.util.*;

public class ValueSortExample {

	public static void main(String[] args) {
		Map map = new HashMap<>();
		
		map.put("A", "29");
		map.put("C", "19");
		map.put("D", "31");
		map.put("B", "15");
		
		List keySetList = new ArrayList<>(map.keySet());
		// 내림차순 //
		Collections.sort(keySetList, new Comparator() {
			@Override
			public int compare(String o1, String o2) {
				return map.get(o2).compareTo(map.get(o1));
			}
		});
		
		for(String key : keySetList) {
			System.out.println(String.format("Key : %s, Value : %s", key, map.get(key)));
		}
		
		System.out.println("-----------------------------------------------------------------");
		
		// 오름차순 //
		Collections.sort(keySetList, (o1, o2) -> (map.get(o1).compareTo(map.get(o2))));
		
		for(String key : keySetList) {
			System.out.println(String.format("Key : %s, Value : %s", key, map.get(key)));
		}

	}

}



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함