녕의 학습 기록
[Java] Map의 value 값들을 리스트로 반환받기 본문
♪ 학습 내용
Map.values() / Collection vs List / stream.collect()
토이 프로젝트 중 Repository인 Map에서 List 형태로 값을 받아와야 하는 경우가 생겼었다.
* Map의 value들을 반환
기본적으로 Map의 value 를 꺼내려면 key 값을 이용해서 꺼낼 수 있다.
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> map = new HashMap<String, Integer>();
map.get(key);
하지만 이렇게 하면 하나씩 밖에 꺼내지 못한다.
따라서 모든 value값 ( key 값도 가능)을 얻기 위해 map.values()
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> map = new HashMap<String, Integer>();
Collection<Integer> values = map.values();
! map의 value 값들이 Collection 형태로 반환된다.
* Collection vs List
map의 value 들을 Collection으로 반환받았고, 이를 List로 변환만 시키면 된다.
근데, Collection 과 List는 어떤 차이를 가지고 있을까 ?
! 사실 List는 Collection 이다. 다만, 더 특별한 Collection이라고 보면 된다.

Collection 에서는 'n번째 원소' 란 정의되지 않는다.
왜냐하면 Collection 에는 순서가 정의되어 있지 않기 때문..!
반면 List는 Collection 처럼 원소를 추가, 제거, 반복, query 할 수 있으며
정의된 순서에 따라 n번째를 다룰 수 있다.
ex ) 3번째 원소 삭제 / 2번째에 원소 추가 ...
이것이 바로 List와 Collection의 차이이다.
* Collection -> List
1. ArrayList의 생성자 이용하기
import java.util.*;
//ArrayList는 List를 구현한다
List<T> list = new ArrayList(컬렉션);
ArrayList의 생성자에 컬렉션을 주면 컬렉션의 값이 들은 리스트(ArrayList)를 생성하여 반환한다..!
2. Stream의 collect() 이용
Stream의 최종처리 메서드인 collect() 는 중간처리스트림을 거친 요소들을 컬렉션에 수집하고 리턴한다.
collect() 메서드는 Collector를 매개로 한다.
Collectors 클래스의 정적 메서드들을 이용하면 여러 종류의 Collector를 반환받을 수 있다.
import java.util.*;
//toList()를 통해 반환되는 컬렉터는 T요소를 List에 저장한다.
//T는 요소, A는 누적기, List에 저장
Collector<T, A, List<T>> collector = Collectors.toList();
import java.util.*;
Stream<Member> stream = memberRepository.values().stream();
List<Member> list = stream.collect(Collectors.toList());
//변수 생략하고 간단히
List<member> list = memberRepository.values()
.stream()
.collect(Collectors.toList());
참고)
'Dev > Java' 카테고리의 다른 글
[Java] 멀티스레드 (0) | 2022.11.13 |
---|---|
[Java Exception] NoSuchBeanDefinitionException (0) | 2022.11.05 |
[Java Exception] java.lang.NullPointerException (0) | 2022.10.27 |
[Java] 인터페이스 (0) | 2022.08.06 |
[Java] 추상클래스 (0) | 2022.07.27 |