녕의 학습 기록

[Java] Map의 value 값들을 리스트로 반환받기 본문

Dev/Java

[Java] Map의 value 값들을 리스트로 반환받기

kjyyjk 2023. 3. 11. 21:06

 학습 내용 

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을 구현

 

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());

 

 

참고)

https://developer-talk.tistory.com/394

https://velog.io/@woply/HashMap-%EC%A0%84%EC%B2%B4-%EA%B0%92%EC%9D%84-%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

https://stackoverflow.com/questions/3317381/what-is-the-difference-between-collection-and-list-in-java

https://docs.oracle.com/javase/8/docs/api/

'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