Java - 특정 조건으로 HashMap 필터링

HashMap의 요소들 중에 특정 조건을 만족하는 요소들만 필터링하는 방법을 소개합니다.

1. for문을 이용한 방법

반복문을 이용하여 HashMap의 모든 요소를 순회하면서 특정 조건을 만족하는 요소들만 새로운 Map에 추가하여 필터링할 수 있습니다.

import java.util.*;

public class Example {

    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(-2, "a1");
        map.put(-1, "a2");
        map.put(-0, "b1");
        map.put(1, "b2");
        map.put(2, "c1");

        Map<Integer, String> filtered = new HashMap<>();
        for (Map.Entry<Integer, String> entry: map.entrySet()) {
            if (entry.getKey() >= 0) {
                filtered.put(entry.getKey(), entry.getValue());
            }
        }

        System.out.println(filtered);
    }
}

Output:

{0=b1, 1=b2, 2=c1}

만약 value의 조건으로 필터링을 하고 싶을 때는, 아래와 같이 Entry의 value에 대해서 조건식을 구현하면 됩니다.

Map<Integer, String> filtered = new HashMap<>();
for (Map.Entry<Integer, String> entry: map.entrySet()) {
    if (entry.getValue().startsWith("b")) {
        filtered.put(entry.getKey(), entry.getValue());
    }
}

System.out.println(filtered);

Output:

{0=b1, 1=b2}

2. Stream을 이용한 방법

HashMap.entrySet()은 요소들을 Entry들의 Set로 리턴합니다.

Entry들의 Stream을 만들고, filter()를 사용하여 특정 조건을 만족하는 요소들만 새로운 Map에 추가할 수 있습니다.

import java.util.*;
import java.util.stream.Collectors;

public class Example1 {

    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(-2, "a1");
        map.put(-1, "a2");
        map.put(-0, "b1");
        map.put(1, "b2");
        map.put(2, "c1");

        Map<Integer, String> filtered = map.entrySet().stream()
                .filter(entry -> entry.getKey() >= 0)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        System.out.println(filtered);
    }
}

Output:

{0=b1, 1=b2, 2=c1}

만약 value에 대한 조건으로 필터링을 하고 싶다면, 아래와 같이 value에 대한 조건식을 구현하면 됩니다.

Map<Integer, String> filtered = map.entrySet().stream()
        .filter(entry -> entry.getValue().startsWith("b"))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

System.out.println(filtered);

Output:

{0=b1, 1=b2}
Loading script...
codechachaCopyright ©2019 codechacha