상세 컨텐츠

본문 제목

[스트림] 특정 조건으로 헤쉬맵 필터링

자바

by esoesmio 2023. 4. 12. 15:22

본문

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}

'자바' 카테고리의 다른 글

[자바] 리스트 역순 순회  (0) 2023.04.12
[싱글톤] 싱글톤 패턴 구현  (0) 2023.04.12
[스트림] reduce 사용법 및 예제  (0) 2023.04.12
[람다식] 람다식 사용법 및 예제  (0) 2023.04.12
[스트림]스트림부수기  (0) 2023.04.12

관련글 더보기

댓글 영역