어제 오늘 내일

[Java] 2개의 HashMap 합치기 (putAll, merge) 본문

IT/Java

[Java] 2개의 HashMap 합치기 (putAll, merge)

hi.anna 2021. 5. 20. 06:28

 

  1. HashMap.putAll()
  2. HashMap.merge() - Java 8 이후

 

 

1. HashMap.putAll()

이 방법을 사용하면, 같은 key가 있을 때, value를 덮어 씁니다.

  예제  

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

public class MergeHashMap {
    public static void main(String[] args) {

        // Map 1 준비
        Map<String, Integer> map1 = new HashMap<>();
        map1.put("Apple", 1000);
        map1.put("Banana", 2000);
        map1.put("Orange", 3000);

        // Map 2 준비
        Map<String, Integer> map2 = new HashMap<>();
        map2.put("Apple", 4000);
        map2.put("Tomato", 5000);
        map2.put("WaterMelon", 6000);

        // Map1 + Map2
        map1.putAll(map2);

        // 결과 출력
        System.out.println(map1);  // {Apple=4000, WaterMelon=6000, Tomato=5000, Orange=3000, Banana=2000}

    }
}

map1.putAll(map2);

putAll() 메소드를 사용하여, 2개의 Map을 합쳤습니다.

이 경우,  key값이 같을 경우, 파라미터로 전달된 Map의 값으로 원본 Map의 value가 변경됩니다.

위 예제에서는, 2개의 Map에 모두 'Apple'이라는 key가 있기 때문에,

'Apple'의 value는 map2의 value인 4000으로 대체되었습니다.

 

 

 

2. HashMap.merge() - Java 8 이후

merge()를 이용하여 2개의 Map을 병합하였습니다.

아래 코드는 key가 같을 때, (위의 예제와 같이), map2의 값이 map1의 값을 덮어 씁니다.

 

 같은 key일 경우, value 덮어 쓰기 

  예제  

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

public class MergeHashMap {
    public static void main(String[] args) {

        // Map 1 준비
        Map<String, Integer> map1 = new HashMap<>();
        map1.put("Apple", 1000);
        map1.put("Banana", 2000);
        map1.put("Orange", 3000);

        // Map 2 준비
        Map<String, Integer> map2 = new HashMap<>();
        map2.put("Apple", 4000);
        map2.put("Tomato", 5000);
        map2.put("WaterMelon", 6000);

        // Map1 + Map2
        map2.forEach((key, value) -> map1.merge(key, value, (v1, v2) -> v2));

        // 결과 출력
        System.out.println(map1);  // {Apple=4000, WaterMelon=6000, Tomato=5000, Orange=3000, Banana=2000}

    }
}

map2.forEach((key, value) -> map1.merge(key, value, (v1, v2) -> v2));

HashMap.merge() 메소드를 사용하여 map1에 map2를 병합하였습니다.

위 예제에서는,

map1과 map2의 key가 같을 경우, map2의 값으로 덮어썼기 때문에,

"Apple"의 값은 map2의 값인 4000이 되었습니다.

 

 같은 key일 경우, value 합계 반영하기 

key가 같을 때, map2의 값이 map1의 값을 덮어 쓰지 않고,

value를 더하는 예제입니다.

  예제  

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

public class MergeHashMap {
    public static void main(String[] args) {

        // Map 1 준비
        Map<String, Integer> map1 = new HashMap<>();
        map1.put("Apple", 1000);
        map1.put("Banana", 2000);
        map1.put("Orange", 3000);

        // Map 2 준비
        Map<String, Integer> map2 = new HashMap<>();
        map2.put("Apple", 4000);
        map2.put("Tomato", 5000);
        map2.put("WaterMelon", 6000);

        // Map1 + Map2
        map2.forEach((key, value) -> map1.merge(key, value, (v1, v2) -> v1 + v2));

        // 결과 출력
        System.out.println(map1);  // {Apple=5000, WaterMelon=6000, Tomato=5000, Orange=3000, Banana=2000}

    }
}

map2.forEach((key, value) -> map1.merge(key, value, (v1, v2) -> v1 + v2));

위 예제와 같이 merge()를 사용하여 2개의 map을 병합하였습니다.

여기서는,

두 개의 map이 동일한 key를 가질 때,

각 key의 value를 더하여, 합계를 반영하였습니다.

따라서, "Apple"의 값은 1000+4000으로 5000이 되었습니다.

 


 

2개의 Map을 병합하는 방법을 살펴보았습니다.

 

 

반응형
Comments