일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- input
- CMD
- CSS
- string
- Array
- Visual Studio Code
- list
- 배열
- Eclipse
- html
- js
- json
- Maven
- windows
- 이탈리아
- 자바스크립트
- IntelliJ
- 이클립스
- Java
- 자바
- 인텔리제이
- date
- ArrayList
- Button
- Files
- javascript
- 문자열
- 테이블
- vscode
- table
- Today
- Total
어제 오늘 내일
[Java] 2개의 HashMap 합치기 (putAll, merge) 본문
- HashMap.putAll()
- 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을 병합하는 방법을 살펴보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] List 중복 제거하는 2가지 방법 (0) | 2021.05.20 |
---|---|
[Java] 문자열에서 마지막 콤마 제거하기 (0) | 2021.05.20 |
[Java] Map을 배열, List, Set으로 변환하기 (0) | 2021.05.19 |
[Java] ArrayList를 HashMap으로 변환하기 (0) | 2021.05.19 |
[Java] HashMap에서 최대값/최소값 key, value 찾기 (1) | 2021.05.19 |