HashMap.forEach()
를 사용하여 HashMap의 모든 요소를 순회할 수 있습니다.
1. HashMap.forEach() Syntax
forEach()
는 다음과 같이 함수형 인터페이스를 인자로 받습니다.
public void forEach(BiConsumer<? super K, ? super V> action)
인자로 전달되는 BiConsumer는 두개의 인자를 받고 리턴 값은 없는 함수형 인터페이스입니다.
람다식으로 구현하여 함수형 인터페이스를 전달할 수 있으며, 첫번째 인자로 HashMap 요소의 key, 두번째 인자로 value가 전달됩니다.
함수형 인터페이스에 대한 자세한 내용은 Java8 - 함수형 인터페이스(Functional Interface) 이해하기를 참고하시면 됩니다.
2. HashMap.forEach()로 HashMap 순회
다음은 forEach로 key와 value를 출력하는 예제입니다. forEach에 람다식을 전달하며, 람다식은 인자로 key와 value가 전달되고, 리턴 값은 없습니다.
Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
fruits.forEach((key, value) -> System.out.println("key: " + key + ", value: " + value));
Output:
key: banana, value: 2
key: apple, value: 1
key: kiwi, value: 3
만약 람다식 안에서 수행하는 작업을 여러 줄로 구현하고 싶다면 아래와 같이 괄호{ }
를 추가하시면 됩니다.
fruits.forEach((key, value) -> {
System.out.println("Iterating map");
System.out.println("key: " + key + ", value: " + value);
});
3. EntrySet.forEach()로 HashMap 순회
HashMap의 EntrySet은 Entry의 집합(Set)입니다. Entry는 HashMap 요소 key와 value를 쌍으로 갖고 있습니다. 즉, Entry 1개는 요소 1개를 의미합니다.
EntrySet 클래스도 forEach()
메소드를 갖고 있습니다. 그리고 Consumer라는 함수형 인터페이스를 인자로 받습니다.
(참고로, Consumer는 인자 1개를 받고 리턴은 하지 않는 함수형 인터페이스)
final class EntrySet extends AbstractSet<Map.Entry<K,V>> {
...
public final void forEach(Consumer<? super Map.Entry<K,V>> action)
...
}
아래와 같이 EntrySet.forEach()
를 이용하여 모든 요소를 순회할 수 있습니다. 람다식을 보면 Entry를 인자로 전달하며, Entry를 통해 key와 value에 접근합니다.
Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
fruits.entrySet().forEach((entry) -> System.out.println(
"key: " + entry.getKey() + ", value: " + entry.getValue()));
Output:
key: banana, value: 2
key: apple, value: 1
key: kiwi, value: 3
4. KeySet.forEach(), Values.forEach()로 HashMap 순회
EntrySet과 유사하게, KeySet은 Map의 모든 key들을 갖고 있는 집합(Set)입니다. 그리고, Values는 모든 value를 갖고 있는 집합(Set)입니다.
KeySet과 Values 클래스도 forEach()
메소드가 있습니다. 이 메소드들도 Consumer라는 함수형 인터페이스를 인자로 받습니다.
public final void forEach(Consumer<? super V> action)
다음과 같이 forEach()
를 이용하여 key와 value를 순회할 수 있습니다.
Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
fruits.keySet().forEach((key) -> System.out.println("key: " + key));
fruits.values().forEach((value) -> System.out.println("value: " + value));
Output:
key: banana
key: apple
key: kiwi
value: 2
value: 1
value: 3
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기