Java에서 Map을 순회하는 다양한 방법을 사용하면 데이터를 보다 효과적으로 처리할 수 있습니다. 여기서는 for-each와 Iterator를 이용한 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 API는 Map의 데이터를 필터링하거나 변환할 때 강력한 도구입니다. 특히 특정 조건에 맞는 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 API는 Map의 고급 데이터 처리를 가능하게 하며, 간결하고 효율적인 코드 작성을 돕습니다.
참고사이트
'JAVA' 카테고리의 다른 글
[JAVA] 고급 Map 패턴 및 활용 예제 (0) | 2024.11.06 |
---|---|
[JAVA] Map 동기화 멀티스레딩 (2) | 2024.11.05 |
[JAVA] Map 성능 최적화와 메모리 관리 (0) | 2024.11.05 |
[JAVA] Map Java8 이상의 기능과 메서드 (0) | 2024.11.05 |
[JAVA] Map 메서드 활용 (0) | 2024.11.05 |
[JAVA] Map 기본 사용법 (0) | 2024.11.02 |
[JAVA] Map 인터페이스와 구현체 (1) | 2024.11.02 |
[JAVA] Map 개요 (0) | 2024.11.02 |