JAVA

[JAVA] Map Java8 이상의 기능과 메서드

인생아 2024. 11. 5. 13:04
반응형

Java 8부터 Map 인터페이스에 유용한 고급 메서드들이 추가되었습니다. 이들은 데이터를 보다 효율적으로 처리하고, Map에 저장된 값을 동적으로 설정하거나 병합하는 데 도움을 줍니다. 여기서는 getOrDefault()로 기본값 설정, computeIfAbsent()와 computeIfPresent()로 동적 값 설정, merge()로 값 병합하는 방법에 대해 자세히 설명하겠습니다. 각 메서드의 예제를 통해 사용법을 익히고, Java Map의 최신 기능을 최대한 활용해보세요.

getOrDefault()와 기본값 설정

getOrDefault() 메서드는 Map에 존재하지 않는 Key에 접근할 때 기본값(default value)을 설정할 수 있는 기능을 제공합니다. 특정 키에 값이 없으면 지정한 기본값을 반환합니다. 이는 null 값에 대한 예외 처리를 줄이고 코드의 가독성을 높여줍니다.

getOrDefault() 예제

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

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

        // "Charlie" 키가 없으므로 기본값 75 반환
        int score1 = scores.getOrDefault("Charlie", 75);
        System.out.println("Charlie's score: " + score1);

        // "Alice" 키가 있으므로 해당 값 반환
        int score2 = scores.getOrDefault("Alice", 0);
        System.out.println("Alice's score: " + score2);
    }
}

이 예제에서 getOrDefault()는 Charlie에 대한 기본값을 반환하므로, 새로운 값을 추가하지 않아도 안전하게 값을 가져올 수 있습니다. Map 기본값 설정이 필요한 상황에서 유용하게 사용할 수 있습니다.

반응형

computeIfAbsent()와 computeIfPresent()를 이용한 동적 값 설정

computeIfAbsent()computeIfPresent() 메서드는 키가 존재하지 않거나 존재할 때 동적으로 값을 설정하는 데 사용됩니다. computeIfAbsent()는 특정 키가 없을 때 새로운 값을 계산하고 추가하며, computeIfPresent()는 키가 있을 때만 계산된 값을 업데이트합니다. 이 기능은 Map에 저장된 값을 효율적으로 관리하는 데 유용합니다.

computeIfAbsent() 예제

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

public class ComputeIfAbsentExample {
    public static void main(String[] args) {
        Map<String, String> names = new HashMap<>();
        names.put("A", "Alice");
        names.put("B", "Bob");

        // "C" 키가 없으므로, 새로운 값 "Charlie" 추가
        names.computeIfAbsent("C", key -> "Charlie");
        System.out.println("Names Map: " + names);

        // "A" 키가 이미 존재하므로 값 추가되지 않음
        names.computeIfAbsent("A", key -> "Alex");
        System.out.println("Updated Names Map: " + names);
    }
}

computeIfAbsent() 메서드는 Map에 키가 없을 때 값 설정을 유연하게 처리해 줍니다. 이 기능은 null 값 또는 특정 조건에서 동적 값 생성이 필요할 때 특히 유용합니다.

computeIfPresent() 예제

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

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

        // "Alice"가 이미 있으므로 점수 5 추가
        scores.computeIfPresent("Alice", (key, value) -> value + 5);
        System.out.println("Scores after Alice's update: " + scores);

        // "Charlie" 키가 없으므로 아무 일도 일어나지 않음
        scores.computeIfPresent("Charlie", (key, value) -> value + 10);
        System.out.println("Scores after Charlie's update: " + scores);
    }
}

computeIfPresent()키가 존재할 때만 값 변경을 수행하므로, 특정 키의 값에 대한 조건부 업데이트가 필요한 경우 적합합니다.

merge()를 활용한 값 병합

merge() 메서드는 Map에 저장된 값을 병합할 때 유용합니다. 기존 키가 없으면 값을 추가하고, 키가 있으면 기존 값과 새로운 값을 병합합니다. 이는 주로 누적 계산, 문자열 연결 또는 특정 연산이 필요할 때 사용됩니다.

merge() 예제

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);
        scores.put("Bob", 92);

        // Alice 점수에 10 추가 (병합)
        scores.merge("Alice", 10, Integer::sum);
        System.out.println("Alice's merged score: " + scores);

        // Charlie 점수가 없으므로 새로운 값 70 추가
        scores.merge("Charlie", 70, Integer::sum);
        System.out.println("Charlie's added score: " + scores);

        // 특정 연산을 이용한 문자열 병합 예제
        Map<String, String> names = new HashMap<>();
        names.put("key1", "Hello");
        names.merge("key1", " World", String::concat);
        System.out.println("Concatenated String: " + names.get("key1"));
    }
}

merge()Map의 값을 병합하여 누적하거나, 문자열을 연결하고, 조건에 맞는 데이터를 조작할 때 유용합니다. Map 데이터 병합을 위한 효율적인 메서드로서 다양한 상황에 적용할 수 있습니다.

참고사이트

반응형