map 의 keySet을 이용하여 정렬한다.
오름차순 시에는 Collection.sort(), 내림차순 시에는 Collection.reverse() 메소드를 사용하여 정렬한다.
import java.util.*;
public class Sort {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("A", 10);
map.put("D", 30);
map.put("C", 20);
map.put("B", 40);
List<String> keySet = new ArrayList<>(map.keySet());
// 키 값으로 오름차순 정렬
Collections.sort(keySet);
for (String key : keySet) {
System.out.print("Key : " + key);
System.out.println(", Val : " + map.get(key));
}
/* 결과
Key : A, Val : 10
Key : B, Val : 40
Key : C, Val : 20
Key : D, Val : 30
*/
// 키 값으로 내림차순 정렬
Collections.reverse(keySet);
for (String key : keySet) {
System.out.print("Key : " + key);
System.out.println(", Val : " + map.get(key));
}
/* 결과
Key : D, Val : 30
Key : C, Val : 20
Key : B, Val : 40
Key : A, Val : 10
*/
}
}
Value 값을 기준으로 정렬할 때는 comparator를 사용하여 정렬한다.
comparator는 람다 표현식으로 간단하게 표현할 수도 있다.
import java.util.*;
public class Sort {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("A", 10);
map.put("D", 30);
map.put("C", 20);
map.put("B", 40);
List<String> keySet = new ArrayList<>(map.keySet());
// Value 값으로 오름차순 정렬
keySet.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return map.get(o1).compareTo(map.get(o2));
}
});
OR 람다식으로 표현하면
//keySet.sort((o1, o2) -> map.get(o1).compareTo(map.get(o2)));
for (String key : keySet) {
System.out.print("Key : " + key);
System.out.println(", Val : " + map.get(key));
}
/*
결과
Key : A, Val : 10
Key : C, Val : 20
Key : D, Val : 30
Key : B, Val : 40
*/
// Value 값으로 내림차순 정렬
// 위 comparator 람다 표현식으로
keySet.sort((o1, o2) -> map.get(o2).compareTo(map.get(o1)));
for (String key : keySet) {
System.out.print("Key : " + key);
System.out.println(", Val : " + map.get(key));
}
/* 결과
Key : B, Val : 40
Key : D, Val : 30
Key : C, Val : 20
Key : A, Val : 10
*/
}
}
TreeMap을 이용하면 Key값 기준 오름차순으로 정렬된 맵을 리턴한다
TreeMap<String, GameScore> tMap = new TreeMap<String, GameScore>(map);
TreeMap<string,string> tm = new TreeMap<>();
Set<string> keyset = tm.keySet();
Iterator<string> keyiterator = tm.keySet( ).iterator( ); //키값 오름차순 정렬
Iterator<string> keyiterator = tm.descendingKeySet().iterator(); //키값 내림차순 정렬