JAVA

[JAVA] Map 메서드 활용

인생아 2024. 11. 5. 09:51
반응형

Java의 Map은 데이터를 Key-Value 형태로 저장하며 다양한 유용한 메서드를 제공합니다. 특히 고급 메서드를 사용하면 Map을 보다 효율적으로 관리하고 조작할 수 있습니다. 이번 섹션에서는 containsKey(), containsValue()키와 값의 존재 여부를 확인하는 방법, keySet(), values(), entrySet()을 사용한 Map 순회, 그리고 replace(), compute(), merge()와 같은 최신 메서드의 활용법을 설명하겠습니다. 적절한 Java 예제 코드를 통해 각 기능을 이해하고 활용해 보세요.

containsKey(), containsValue()로 키와 값 존재 여부 확인

containsKey()containsValue()는 특정 Key 또는 ValueMap에 존재하는지 확인하는 데 사용됩니다. containsKey(key)는 지정된 key가 Map에 있으면 true를 반환하고, containsValue(value)는 지정된 value가 Map에 있으면 true를 반환합니다.

예제 코드

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

public class ContainsExample {
    public static void main(String[] args) {
        Map<String, Integer> studentScores = new HashMap<>();
        studentScores.put("Alice", 85);
        studentScores.put("Bob", 92);

        System.out.println("Contains key 'Alice': " + studentScores.containsKey("Alice")); // true
        System.out.println("Contains value 92: " + studentScores.containsValue(92)); // true
        System.out.println("Contains key 'Charlie': " + studentScores.containsKey("Charlie")); // false
    }
}

containsKey()와 containsValue()는 데이터를 검색하거나 특정 조건을 만족하는지 확인할 때 유용합니다. 예를 들어, 유저의 아이디가 이미 등록되어 있는지 확인하거나 특정 점수가 존재하는지 확인할 수 있습니다.

keySet(), values(), entrySet()을 통한 순회

Map의 모든 KeyValue를 순회하려면 keySet(), values(), entrySet() 메서드를 사용할 수 있습니다. keySet()은 모든 Key를 반환하고, values()는 모든 Value를 반환하며, entrySet()Key-Value 쌍을 각각 Entry 객체로 반환합니다. 이들은 Map의 데이터를 효율적으로 순회하고 처리할 때 사용됩니다.

예제 코드

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

public class MapIterationExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();
        scores.put("Alice", 85);
        scores.put("Bob", 92);
        scores.put("Charlie", 78);

        // keySet()을 사용한 키 순회
        System.out.println("Keys:");
        for (String key : scores.keySet()) {
            System.out.println(key);
        }

        // values()를 사용한 값 순회
        System.out.println("Values:");
        for (Integer value : scores.values()) {
            System.out.println(value);
        }

        // entrySet()을 사용한 Key-Value 쌍 순회
        System.out.println("Entries:");
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
    }
}

keySet(), values(), entrySet()을 통해 쉽게 데이터를 확인하고 처리할 수 있어, 조건에 따른 데이터 가공이나 전체 데이터를 출력할 때 유용합니다.

반응형

replace(), compute(), merge()와 같은 최신 메서드 활용

Java 8부터 Map에는 replace(), compute(), merge()와 같은 메서드가 추가되었습니다. 이 메서드들은 Map의 값을 효율적으로 업데이트하거나 조건에 따라 값을 수정하는 데 유용합니다.

replace() 메서드

replace(key, newValue)는 주어진 Key가 존재할 때 해당 값을 newValue로 교체합니다. replace(key, oldValue, newValue)는 기존 값이 oldValue와 같을 때만 새로운 값으로 대체합니다.

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

public class ReplaceExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();
        scores.put("Alice", 85);
        scores.put("Bob", 92);

        // Alice의 점수 업데이트
        scores.replace("Alice", 90);
        System.out.println("Updated Alice's Score: " + scores);

        // 특정 조건에 따라 교체
        scores.replace("Bob", 92, 95);
        System.out.println("Conditionally Updated Bob's Score: " + scores);
    }
}

compute() 메서드

compute(key, (k, v) -> newValue)Key에 매핑된 값을 계산하여 업데이트할 때 사용됩니다. 기존 값을 기반으로 연산이 필요할 때 유용하며, BiFunction을 인자로 받아 기존 KeyValue에 따라 계산된 새 값을 Map에 저장합니다.

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

public class ComputeExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();
        scores.put("Alice", 85);
        scores.put("Bob", 92);

        // Alice의 점수를 5만큼 증가
        scores.compute("Alice", (k, v) -> (v == null) ? 0 : v + 5);
        System.out.println("Computed Alice's Score: " + scores);

        // 새로운 Key-Value 추가
        scores.compute("Charlie", (k, v) -> (v == null) ? 80 : v + 5);
        System.out.println("Computed Charlie's Score: " + scores);
    }
}

merge() 메서드

merge(key, value, (oldValue, newValue) -> result)는 지정된 Key에 대해 값이 존재하지 않으면 값을 추가하고, 존재하면 기존 값과 새 값을 병합합니다. 주로 값을 누적하거나 조건에 따라 병합할 때 사용됩니다.

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

public class MergeExample {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();
        scores.put("Alice", 85);

        // Alice의 점수를 10 증가
        scores.merge("Alice", 10, Integer::sum);
        System.out.println("Merged Alice's Score: " + scores);

        // 새 학생 점수 추가
        scores.merge("Bob", 78, Integer::sum);
        System.out.println("Merged Bob's Score: " + scores);
    }
}

replace(), compute(), merge()는 특정 조건에 맞춰 값 업데이트를 효율적으로 처리할 수 있어 데이터 변환이나 Map의 데이터 관리가 중요한 상황에서 유용합니다.

참고사이트

반응형