[Java] Map.getOrDefault(K key, V default-value)

2024. 8. 25. 16:14Language/Java

 Map 객체에 요소를 추가할 때 반드시 'key' 값의 존재 여부를 확인('key' 는 중복이 없어야 하기 때문)하여야 한다. 필요에 따라 'key' 가 존재하면 해당 'key' 의 'value' 의 값을 수정하거나 존재하지 않는다면 기본 값을 지정해 Map 객체에 추가하는 경우도 있다. 자체적으로 기능을 구현해 사용해도 되지만 이러한 기능을 가진 메서드가 이미 구현되어있으니 바로 'Map.getOrDefault()' 이다. 오늘은 해당 메서드를 다루어 파악해보자.

 

1. 기본 문법

Map<key-type, value-type> map = new HashMap<>();

map.getOrDefault(key, default-value);

 

 'getOrDefault()' 메서드는 2개의 파라미터를 요구하는데 하나는 'key' 값이고 다른 하나는 'key' 가 존재하지 않을 때 반환할 '기본 값(default-value)' 이다. 해당 메서드의 기능은 입력받은 'key' 값이 현재 Map 객체에 존재하는지 확인하고 없다면 'default-value' 를 반환, 'key' 가 존재한다면 현재 페어인 'value' 를 반환한다.

 

 

2. 사용 예시

2-1. key 의 존재를 확인하고 value 수정

Map<String, Integer> productCount = new HashMap<>();
productCount.put("과자", 10);
productCount.put("라면", 5);
productCount.put("우유", 1);
productCount.put("커피", 3);

System.out.println("현재 물품별 재고 : " + productCount);

String[] product = new String[]{"과자", "라면", "우유", "커피", "사과", "커피", "커피"};

for (String p : product) {
	productCount.put(p, productCount.getOrDefault(p, 0) + 1);
}

System.out.println("변경 물품별 재고 : " + productCount);

// 결과
현재 물품별 재고 : {과자=10, 커피=3, 우유=1, 라면=5}
변경 물품별 재고 : {과자=11, 커피=6, 우유=2, 사과=1, 라면=6}

 

 현재 물품별 재고가 Map 객체인 'productCount'새로 들어온 물품들은 'product' 에 저장되어 있을 때, 입고 이후 물품별 재고를 연산한 예시이다. 물품분류가 'key' 이므로 'productCount' 에 물품이 있는지 확인하고 있다면 재고를 '+1' 없다면 '1' 을 수량으로 하여 새로운 항목을 추가하여야 한다.

 

 'product' 의 각 요소를 하나씩 가져와 'productCount' 에 추가하게 될 텐데, 'value' 를 구할 때 'getOrDefault()' 를 사용하였다. 'key' 가 존재하면 현재 페어를 반환해 '+1' 연산을 해 Map 객체에 추가(업데이트)하고 없다면 '0' 을 반환해 '+1' 연산을 해 Map 객체에 추가하는 것이다.

 

 입고 전 'productCount' 와 입고 후 'productCount' 를 출력해보니 연산을 통해 제대로 물품 수량이 수정된 것을 확인 할 수 있었다.

'Language > Java' 카테고리의 다른 글

[Java] Map.entrySet()  (0) 2024.08.25
[Java] Map.computeIfAbsent(K key, Function)  (0) 2024.08.22
[Java] PriorityQueue  (0) 2024.08.10