Java - HashMap.forEach() 사용 방법 및 예제

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
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha