소개
Java 에서 Map 은 기본적으로 정렬되지 않으며, key-value 형식으로 데이터를 저장합니다. 값에 따라 결정을 내리기 위해 값을 기준으로 정렬해야 하는 경우가 많습니다. 이 단계별 Lab 에서는 Java Map 을 값 기준으로 정렬하는 방법을 배우겠습니다.
Java 에서 Map 은 기본적으로 정렬되지 않으며, key-value 형식으로 데이터를 저장합니다. 값에 따라 결정을 내리기 위해 값을 기준으로 정렬해야 하는 경우가 많습니다. 이 단계별 Lab 에서는 Java Map 을 값 기준으로 정렬하는 방법을 배우겠습니다.
먼저, Java 에서 Map 을 정렬하는 방법을 이해하기 위해 학생들의 이름과 키 (cm) 를 담은 Map 을 생성하겠습니다.
import java.util.*;
public class MapSortingDemo {
public static void main(String args[]) {
Map<String, Integer> students = new HashMap<>();
students.put("Student 1", 159);
students.put("Student 2", 147);
students.put("Student 3", 183);
students.put("Student 4", 167);
students.put("Student 5", 173);
}
}
값을 기준으로 Map 을 정렬하려면 Map.entrySet()에서 List 를 생성해야 합니다. 이 메서드는 Map 에서 모든 key-value 쌍을 반환합니다. Comparator 함수는 특정 집합을 여러 매개변수에 따라 정렬해야 할 때 사용됩니다. Comparator 함수에서 return student1.getValue().compareTo(student2.getValue());는 정렬 방식을 결정합니다. 즉, 값을 기준으로 정렬하며, 이는 Map 을 값 기준으로 정렬합니다.
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
Collections.sort(studentList, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> student1, Map.Entry<String, Integer> student2) {
return student1.getValue().compareTo(student2.getValue());
}
});
정렬된 Map 을 콘솔에 표시합니다.
for (Map.Entry<String, Integer> student : studentList) {
System.out.println(student.getKey() + " " + student.getValue());
}
Lambda 표현식을 사용하여 값을 기준으로 Map 을 정렬할 수도 있습니다. 이는 더 짧고 효율적인 방법입니다.
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
studentList.sort((student1, student2) -> student1.getValue().compareTo(student2.getValue()));
정렬된 Map 을 콘솔에 표시합니다.
studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));
마찬가지로, 키를 기준으로 Map 을 정렬할 수 있습니다. 비교자 함수에서 return student1.getKey().compareTo(student2.getKey());는 정렬 방식을 결정합니다. 즉, 키를 기준으로 정렬합니다.
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
Collections.sort(studentList, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> student1, Map.Entry<String, Integer> student2) {
return student1.getKey().compareTo(student2.getKey());
}
});
정렬된 Map 을 콘솔에 표시합니다.
for (Map.Entry<String, Integer> student : studentList) {
System.out.println(student.getKey() + " " + student.getValue());
}
더 짧고 효율적인 방법인 람다 표현식 (Lambda Expression) 을 사용하여 키를 기준으로 Map 을 정렬할 수도 있습니다.
List<Map.Entry<String, Integer>> studentList = new ArrayList<>(students.entrySet());
studentList.sort((student1, student2) -> student1.getKey().compareTo(student2.getKey()));
정렬된 Map 을 콘솔에 표시합니다.
studentList.forEach(student -> System.out.println(student.getKey() + " " + student.getValue()));
이 랩에서는 Collections.sort() 메서드와 Comparator 함수를 사용하여, 그리고 람다 표현식 (Lambda Expression) 을 사용하여 Java Map 을 값 (value) 을 기준으로 정렬하는 방법을 배웠습니다. 또한 키 (key) 를 기준으로 Map 을 정렬하는 방법도 배웠습니다. 값을 기준으로 Map 을 정렬하는 것은 순위 매기기나 우선순위 기반 작업과 같은 많은 상황에서 유용할 수 있습니다.