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