Java에서 키로 HashMap 정렬
Java 언어의HashMap
이라는 용어는Map
인터페이스에서 파생 된 모음입니다. 이 컬렉션 또는 클래스는java.util
패키지에 있으며 데이터를 키-값 쌍으로 저장합니다. 지도에는 두 개의 키가있을 수 없습니다. 중복 키가 삽입되면 각 키의 값이 최신 값으로 대체됩니다.
Java에서TreeMap
클래스를 사용하여 키 세트 정렬
아래는 키별로HashMap
의 정렬을 보여주는 코드 블록입니다.
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class HashMapSortByKey {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("2", "Value5");
map.put("3", "Value1");
map.put("1", "Value2");
map.put("4", "Value3");
map.put("9", "Value4");
map.put("hi11", "Value6");
map.put("hi0", "Value7");
System.out.print("Unordered List: ");
for (String s : map.keySet()) {
System.out.print(" " + s);
}
System.out.println();
System.out.print("Ordered List: ");
TreeMap<String, String> map1 = new TreeMap<>(map);
for (String s : map1.keySet()) {
System.out.print(" " + s);
}
}
}
위의 코드 블록에서map
객체는new
키워드와 함께HashMap
의 기본 생성자를 사용하여 선언됩니다. 이 명령문은HashSet
클래스의 인스턴스를 작성하고 값을Map
인터페이스 참조에 할당합니다. HashMap
클래스가Map
인터페이스를 내부적으로 구현하므로 유형이 호환됩니다.
맵은 일부 키 값 세트로 초기화됩니다. 삽입은 키를 지정된 값에 바인딩하는put
메소드를 사용하여 발생합니다. 이 메서드는 키가 이미지도에있는 경우이전 값
을 반환하고 이전 값을 지정된 값으로 재정의합니다. 이 함수는 키가 맵에 아직없는 경우null
값을 반환합니다. 키 또는 값의 속성이 값의 삽입을 금지하는 경우IllegalArgumentException
이 발생합니다.
이제 맵을 반복하기 위해for-each
루프가 사용됩니다. map.keySet
함수는 맵에있는 모든 키의Set
형식을 반환합니다. keyset 함수는 변수가 반복 할 수있는for-each
루프에서 컬렉션을 가져옵니다. 따라서 키를 인쇄합니다. 순서가 지정되지 않은 형식으로 값을 인쇄하고 사용자가 출력을 얻는 잘 정의 된 방식이 없습니다.
맵 키를 정렬하기 위해TreeSet
클래스가 사용됩니다. map
변수는 인스턴스화시TreeSet
생성자에서 생성자 매개 변수로 제공됩니다. 이 클래스는Comparable
인터페이스를 구현하여 키를 정렬합니다. 결과 맵map1
이 인쇄되면 출력에 정렬 된 키가 인쇄됩니다.
아래는 위 코드 블록의 출력입니다.
출력:
Unordered List: 1 hi11 2 3 4 9 hi0
Ordered List: 1 2 3 4 9 hi0 hi11
Java 8 함수를 사용하여 키 집합 정렬
Java 8은 기능적 프로그래밍의 권한을 제공하여 체인 기능에 대한 작업을 도와줍니다. 아래 프로그램에서 인스턴스화 및 초기화가 명령문에서 발생하는 것을 볼 수 있습니다. 첫 번째 예제 코드에서지도를 채우는 것은 지루한 작업입니다. Streams
및 단일 명령문에서 맵을 인스턴스화하는 기능에 대한 이해는 다음과 같습니다.
Streams
는 한 번에 일련의 작업을 유연하게 처리 할 수있는java.util
패키지의 인터페이스입니다. Streams
는 이미 터가 데이터를 내보내는 파이프 라인에서 작동합니다. 사용자의 필요에 따라 필터링, 처리, 변환 등을 수행합니다.
import static java.util.AbstractMap.SimpleEntry;
import static java.util.stream.Collectors.toMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Stream;
public class HashMapSortByKey {
public static void main(String[] args) {
Map<String, String> map =
Stream
.of(new SimpleEntry<>("key6", "value1"), new SimpleEntry<>("key12", "value2"),
new SimpleEntry<>("key9", "value3"))
.collect(toMap(SimpleEntry::getKey, SimpleEntry::getValue));
System.out.print("Unordered List: ");
for (String s : map.keySet()) {
System.out.print(" " + s);
}
Map<String, String> mapSortedByKey =
map.entrySet()
.stream()
.sorted(Map.Entry.<String, String>comparingByKey().reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldVal, newValue) -> oldValue, LinkedHashMap::new));
System.out.println();
System.out.print("Ordered List: ");
for (String s1 : mapSortedByKey.keySet()) {
System.out.print(" " + s1);
}
}
}
Java의 맵 초기화 스트림 기능 이해
첫째,Stream
은 지정된 스트림을 순차적으로 반환하는of()
함수를 호출합니다. 이 함수는SimpleEntry
클래스의 개체를 만들어 키-값 형식의 매핑을 만듭니다. 이 클래스는Entry
인터페이스를 구현하고 맵의 콜렉션보기를 리턴하는entrySet
메소드가 있습니다.
키-값 항목이 형성되면collect
기능을 사용하여 값이 맵에 수집됩니다. 수집 기능 후에 더 이상 메소드를 호출 할 수 없음을 의미하는 터미널 기능입니다. 함수는 원하는 데이터 구조의 스트림 값을 패키지화하거나 바인딩합니다.
매개 변수로 제공된 입력은 항상수집기
참조입니다. toMap
은 Map의 스트림 요소를 바인딩하는Collector
를 리턴하는Collectors
클래스의 정적 함수입니다. 이 함수는 매개 변수로 키 매퍼와 키 값함수
를 사용합니다. 이제 메서드 참조::
연산자는 지정된 클래스의 함수를 호출하는 것을 의미합니다.
키 매퍼에서getKey
함수는 채워진EntrySet
스트림에서 키를 추출합니다. 마찬가지로 키 Value 함수에서getValue
함수가 호출되어EntrySet
스트림에서 값을 가져옵니다.
위 코드의Collector``Function
변수는 기능에 대한 단일 추상 메소드가있는 Java의 기능 인터페이스입니다. 추상 메서드의 정의는이를 구현하는 클래스에서 정의됩니다.
Java의 맵 변환 스트림 기능 이해
방금 형성된map
인스턴스에서entrySet
함수가 호출됩니다. 이 함수는지도 항목의 집합보기를 반환하며지도 인터페이스에 있습니다. 이러한 항목에 대해stream
메소드가 호출되어 순차 스트림의 항목을 변환합니다. 엔트리 스트림을 통해sorted
함수가 호출됩니다.
Stream
요소를 비교하려면Comparator
가 필요합니다. 정렬 된 함수는 마지막으로 주어진 항목의 정렬 된 스트림을 반환합니다. comparingByKey
함수는 키에 대한 기본 순서와 함께Map.Entry
비교기를 반환합니다. 비교기는 키 세트를 반환합니다. 발견 된 키가 null 인 경우 함수에서NullPointerException
이 발생합니다.
항목 집합이 검색되면reversed
함수가 호출되어 컬렉션의 요소 순서를 반대로합니다. 마지막으로collect
함수가 맵 스트림을 통해 호출됩니다. 이 함수는 터미널 연산자이므로collect
함수 후에 어떤 작업도 호출 할 수 없습니다. 함수에서toMap
함수가 호출되어 스트림을 맵으로 변환합니다.
이 함수는 4 개의 매개 변수를 사용합니다.keyMapper
는 키를 생성하는 함수,valueMapper
는 값을 생성하는 매핑 함수,mergeFunction
은 함수를 병합하는BinaryOperator
,mapSupplier
는 결과가 삽입되는 비어있는 새 맵을 반환하는Supplier
함수. 마지막으로 결과 콘솔 출력이 위에 인쇄됩니다.
출력:
Unordered List: key12 key6 key9
Ordered List: key9 key6 key12
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