Java에서 순서가 지정된 맵 만들기

Rashmi Patidar 2023년10월12일
  1. Java의 TreeMap 클래스를 사용하여 맵 정렬
  2. Java 8 함수를 사용하여 맵 순서 만들기
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은 사용자가 기능 체인을 통해 작업할 수 있도록 하는 기능 프로그래밍을 지원합니다.

Streamsjava.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
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

관련 문장 - Java Map

관련 문장 - Java Sort