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]참고
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 - BufferedReader로 파일 읽기
- Java - BufferedWriter로 파일 쓰기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java charAt() 함수 알아보기
- 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 가져오기