본문 바로가기

Programming/Java

java.util.Map retainAll() : Map에서 특정 키만 유지

반응형

 

Map 에서 특정 키만 유지하는 방법

 

Map의 키 집합은 keySet() 메서드를 통해 반환된다.

이 set은 map과 연결되어 있어 set의 변경은 map에도 반영된다.

retainAll() 메서드는 Collection 인터페이스의 메서드로, 현재 컬렉션에서 주어진 컬렉션에서 포함된 요소만 유지하고 나머지는 제거한다.

따라서 Map에서 특정 키만 남기고 나머지를 제거하고 싶으면 ketSet() 메서드와 retailnAll() 메서드를 함께 사용하면 된다.

 

예시

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class RetainKeysExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);
        map.put("date", 4);

        // 유지할 키들을 정의합니다.
        Set<String> keysToRetain = new HashSet<>();
        keysToRetain.add("apple");
        keysToRetain.add("cherry");

        // map의 키셋에서 keysToRetain에 있는 키만 남기고 나머지는 제거합니다.
        map.keySet().retainAll(keysToRetain);

        // 결과 출력
        System.out.println(map); // {apple=1, cherry=3}
    }
}
반응형

 

추가적으로,

Map A와 B가 있을때, A에만 존재하는 키-밸류를 B에 추가하고 싶을 때

 

예시

import java.util.HashMap;
import java.util.Map;

public class MapUpdateExample {
    public static void main(String[] args) {
        // 예제용 Map A와 B 생성
        Map<String, Integer> mapA = new HashMap<>();
        mapA.put("one", 1);
        mapA.put("two", 2);
        mapA.put("three", 3);

        Map<String, Integer> mapB = new HashMap<>();
        mapB.put("two", 2);
        mapB.put("four", 4);

        // A에서 B에 없는 부분만 B에 추가하는 메서드 호출
        addMissingEntries(mapA, mapB);

        // 결과 출력
        System.out.println("Updated Map B: " + mapB);
    }

    public static void addMissingEntries(Map<String, Integer> source, Map<String, Integer> target) {
        for (Map.Entry<String, Integer> entry : source.entrySet()) {
            // B에 없는 키만 B에 추가
            if (!target.containsKey(entry.getKey())) {
                target.put(entry.getKey(), entry.getValue());
            }
        }
    }
}
반응형