JAVA

[JAVA] Map 반복문과 순회 방법

인생아 2024. 11. 5. 11:58
반응형

Java에서 Map을 순회하는 다양한 방법을 사용하면 데이터를 보다 효과적으로 처리할 수 있습니다. 여기서는 for-eachIterator를 이용한 Map의 키와 값 순회, forEach() 메서드를 통한 순회, 그리고 Stream API를 사용해 Map의 데이터를 필터링하고 변환하는 방법에 대해 알아보겠습니다. 각 메서드와 예제 코드를 통해 Java Map의 효율적인 순회 방법을 학습해보세요.

for-each와 Iterator로 키, 값 순회하기

for-each 루프Iterator는 Java의 가장 기본적인 순회 방식입니다. for-each 루프를 사용해 Map의 keySet(), values(), entrySet()을 각각 순회할 수 있으며, Iterator는 순회 중 값을 삭제해야 할 때 유용합니다.

for-each를 사용한 Map 순회 예제

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

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

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

        // Key만 순회
        for (String key : scores.keySet()) {
            System.out.println("Key: " + key);
        }

        // Value만 순회
        for (Integer value : scores.values()) {
            System.out.println("Value: " + value);
        }
    }
}

for-each 루프는 간단한 Map 순회 시 매우 편리합니다. 하지만, Iterator를 사용하면 데이터 수정이 가능하므로 순회 도중 데이터 삭제가 필요한 경우 Iterator를 사용하는 것이 좋습니다.

Iterator를 사용한 Map 순회 예제

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

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

        // Entry를 Iterator로 순회하면서 삭제
        Iterator<Map.Entry<String, Integer>> iterator = scores.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> entry = iterator.next();
            if (entry.getValue() < 80) { // 특정 조건에 따라 삭제
                iterator.remove();
            }
        }
        System.out.println("Updated Map: " + scores);
    }
}

Iterator는 iterator.remove()를 사용해 순회 중 안전하게 데이터를 삭제할 수 있어, 특정 조건에 따라 데이터를 삭제하거나 변형할 때 유용합니다.

forEach() 메서드를 사용한 순회

Java 8부터 forEach() 메서드가 추가되어 더욱 간단하게 Map을 순회할 수 있습니다. 이 메서드는 람다 표현식을 사용하여 코드의 가독성을 높이며, 각 Key-Value 쌍을 처리하는 작업을 간편하게 수행할 수 있습니다.

forEach()를 사용한 Map 순회 예제

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

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

        // forEach를 사용한 순회
        scores.forEach((name, score) -> {
            System.out.println("Name: " + name + ", Score: " + score);
        });
    }
}

forEach() 메서드를 사용하면 코드가 간결해지며, 람다 표현식을 통해 Map의 각 요소에 쉽게 접근할 수 있습니다. 이는 Java8에서 추가된 람다식 기반의 Map 순회 방식 중 하나로, 코드의 간결성을 높이는 데 매우 유용합니다.

Stream API를 활용한 Map의 필터링과 변환

Java Stream APIMap의 데이터를 필터링하거나 변환할 때 강력한 도구입니다. 특히 특정 조건에 맞는 Key-Value 쌍을 필터링하거나 데이터를 변환할 때 Stream을 사용할 수 있습니다. Stream은 Java 8부터 지원되며, Map의 데이터를 필터링하거나 가공할 때 매우 유용합니다.

Stream을 사용한 필터링 예제

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

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

        // 점수가 80 이상인 항목만 필터링
        Map<String, Integer> filteredScores = scores.entrySet().stream()
                .filter(entry -> entry.getValue() >= 80)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        System.out.println("Filtered Map: " + filteredScores);
    }
}

이 예제에서는 Stream API를 사용해 특정 점수 이상의 학생들만 포함하는 새로운 Map을 생성했습니다. filter()를 통해 원하는 조건에 맞는 데이터만 추출할 수 있습니다.

Stream을 사용한 변환 예제

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

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

        // 점수에 5점씩 추가하는 변환
        Map<String, Integer> updatedScores = scores.entrySet().stream()
                .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue() + 5));

        System.out.println("Updated Scores Map: " + updatedScores);
    }
}

이 예제에서는 각 점수에 5점을 추가새로운 Map을 생성했습니다. Stream의 map()과 collect()를 조합하면 Map 데이터를 변환해 새로운 데이터를 생성할 수 있습니다. Stream APIMap의 고급 데이터 처리를 가능하게 하며, 간결하고 효율적인 코드 작성을 돕습니다.

참고사이트

반응형