Java - Map을 List로 변환하는 방법

Map은 List와 다르게 key-value 형태로 데이터를 저장합니다. 즉, key와 value가 모두 저장됩니다.

이 글에서는 Map의 모든 key 또는 value들을 추출하여 각각 List로 변환하는 방법을 소개합니다.

Map은 Map.keySet(), Map.values()라는 메소드를 제공하며, 이 함수들은 각각 key 또는 value의 모든 요소들이 저장된 Collection 객체를 리턴합니다. 참고로, Set 클래스는 Collection 클래스를 상속하기 때문에 둘 다 Collection 객체를 리턴합니다.

// Map.java
Set<K> keySet();
Collection<V> values();

1. List 생성자로 Map을 List로 변환

ArrayList의 생성자에 Map의 Key와 Value에 대한 Collection 객체를 인자로 전달하면 Set의 요소를 모두 갖고 있는 리스트가 생성됩니다.

keySet()values() 함수는 각각 모든 key와 value를 갖고 있는 Collection 객체를 리턴합니다.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Example {
    public static void main(String[] args) {

        Map<String, String> map = new HashMap<>();
        map.put("101", "apple");
        map.put("102", "kiwi");
        map.put("103", "orange");
        map.put("104", "banana");
        map.put("105", "peach");

        List<String> keyList = new ArrayList<>(map.keySet());
        List<String> valueList = new ArrayList<>(map.values());

        System.out.println(keyList);
        System.out.println(valueList);
    }
}

Output:

[101, 102, 103, 104, 105]
[apple, kiwi, orange, banana, peach]

참고로, ArrayList의 생성자는 인자로 Collection을 받으며, Set는 Collection을 상속하는 클래스이기 때문에 Collection입니다.

2. Stream을 이용하여 Map을 List로 변환

Stream을 이용하여 Map을 List로 변환할 수 있습니다.

아래와 같이 key와 value에 대한 Stream을 생성하고 List로 변환할 수 있습니다.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Example {
    public static void main(String[] args) {

        Map<String, String> map = new HashMap<>();
        map.put("101", "apple");
        map.put("102", "kiwi");
        map.put("103", "orange");
        map.put("104", "banana");
        map.put("105", "peach");

        List<String> keyList = map.keySet().stream()
                .collect(Collectors.toCollection(ArrayList::new));
        List<String> valueList = map.values().stream()
                .collect(Collectors.toCollection(ArrayList::new));

        System.out.println(keyList);
        System.out.println(valueList);
    }
}

Output:

[101, 102, 103, 104, 105]
[apple, kiwi, orange, banana, peach]

2.1 요소 필터링

만약 어떤 조건으로 요소들을 필터링을 하고 싶다면 Stream을 이용하여 Map을 List로 변환하는 것이 좋을 수 있습니다.

예를 들어, Value에서 apple을 제외한 나머지 요소들을 리스트로 변환할 수 있습니다.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Example {
    public static void main(String[] args) {

        Map<String, String> map = new HashMap<>();
        map.put("101", "apple");
        map.put("102", "kiwi");
        map.put("103", "orange");
        map.put("104", "banana");
        map.put("105", "peach");

        List<String> valueList = map.values().stream()
                .filter((fruit)-> !fruit.equals("apple"))
                .collect(Collectors.toCollection(ArrayList::new));

        System.out.println(valueList);
    }
}

Output:

[kiwi, orange, banana, peach]

참고

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha