HOWTO · Java
Java에서 순서가 지정된 맵 만들기
이 문서에서는 Java에서 순서가 지정된 맵을 만드는 방법을 소개합니다.
이 페이지의 내용
맵은 키와 값 쌍을 저장하는 Java의 데이터 구조입니다. 지도는 Collection 계층 구조에 있는 인터페이스입니다. 이러한 키는 고유하므로 중복 키가 허용되지 않습니다. 그러나 키에 매핑된 변수는 중복 값을 가질 수 있습니다. HashMap, LinkedHashMap, TreeMap과 같은 클래스는 Map 인터페이스를 구현합니다.
Java의 TreeMap 클래스를 사용하여 맵 정렬
아래에서 프로그램은 Java 프로그램의 맵 순서를 보여줍니다.
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
map.put("Third", 1);
map.put("First", 2);
map.put("Second", 3);
for (String key : map.keySet()) {
System.out.println(key + " ,ID = " + map.get(key));
}
}
}
TreeMap 클래스는 지도 값을 오름차순으로 정렬합니다. 또한 내부적으로 SortedMap 인터페이스를 구현하므로 새 키워드를 사용하여 맵 인스턴스가 생성됩니다.
트리맵 내부의 데이터 유형은 인스턴스화 시 지정됩니다. Map 키는 String 유형이고 값은 Integer 유형입니다.
put 함수는 트리맵에 키-값 쌍을 삽입합니다. 이제 for-each 루프가 맵을 반복하도록 정의됩니다. Java에서는 맵에 대한 직접 반복이 불가능합니다. 따라서 지도의 키는 처음에 Set 인스턴스로 변환됩니다.
map.keySet 함수는 지도에 있는 키의 Set를 반환합니다. 이 함수는 TreeMap 클래스에 있으며 현재 키의 정렬된 보기를 반환합니다. get 함수는 키에 해당하는 값을 가져옵니다.
아래는 오름차순으로 출력한 것입니다.
First, ID = 2 Second, ID = 3 Third, ID = 1
Java 8 함수를 사용하여 맵 순서 만들기
Java 8은 사용자가 기능 체인을 통해 작업할 수 있도록 하는 기능 프로그래밍을 지원합니다.
Streams는 java.util 패키지의 인터페이스로, 단일 명령문에서 순차 작업을 쉽게 수행할 수 있습니다. Streams 함수는 이미터가 데이터를 내보내는 파이프라인에서 작동합니다. 사용자의 요구에 따라 필터링, 처리, 변환 등의 작업을 수행합니다.
package F09;
import static java.util.AbstractMap.SimpleEntry;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class MapOrdering {
public static void main(String[] args) {
Map<String, String> mapSortedByKey =
Stream
.of(new SimpleEntry<>("key3", "value1"), new SimpleEntry<>("key1", "value2"),
new SimpleEntry<>("key2", "value3"))
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldVal, newValue) -> oldVal, LinkedHashMap::new));
System.out.println();
System.out.print("Ordered List: ");
for (String s1 : mapSortedByKey.keySet()) {
System.out.print(" " + s1);
}
}
}
Stream 인터페이스는 다양한 기능을 제공하고 다른 클래스에서 이를 구현하여 작업합니다. 여기에서 키-값 쌍의 스트림은 새 SimpleEntry 클래스를 사용하여 형성됩니다. 값이 of 함수에 삽입되어 스트림을 형성합니다.
체인 시리즈에서 sorted 함수가 호출됩니다. 이 함수는 Comparator 인스턴스를 사용하여 정의된 순서에 따라 키를 순서대로 정렬합니다. comparingByKey 함수는 키를 자연 오름차순으로 비교하는 비교기를 반환합니다.
sorted 함수는 마침내 오름차순으로 정렬된 값 스트림을 반환합니다. Stream 클래스의 collect 함수는 새 LinkedHashMap 인스턴스에서 지정된 맵 값을 수집합니다. 클래스는 제공된 시퀀스의 삽입 순서를 유지합니다. 이 함수는 Collector 인스턴스를 매개변수로 사용합니다.
첫 번째 매개변수는 새 컨테이너를 생성하는 공급자 toMap 함수입니다. 두 번째 매개변수는 값을 누적하는 BiConsumer이고 마지막 매개변수는 결과를 병합하는 결합기 역할을 하는 BiConsumer입니다. 따라서 LinkedHashMap::new 명령은 결과를 결합하고 형성된 인스턴스를 반환합니다.
mapSortedByKey 인스턴스는 이제 위의 for-each 루프를 사용하여 반복되는 순차 맵 요소를 보유합니다. 결과 맵 키는 아래 표준 출력에 인쇄됩니다.
Ordered List : key1 key2 key3