SpringBoot 토이 프로젝트를 하다가, LinkedMultiValueMap의 사용을 알게되었다.
uri를 만들 때, SearchLocalReq를 쿼리 파라미터로 queryParam()에 넣어야한다.
🧐 하지만 쿼리 파라미터로 일일이 다 만들어주는 것은 너무 귀찮고, 실수할 가능성도 생기게 된다.
➡️ 그러니, MultiValueMap 형태를 미리 만들어 놓고 사용하겠다!
<var uri = UriComponentsBuilder.fromUriString(naverLocalSearchUrl)
.queryParams(searchLocalReq.toMultiValueMap())
.build()
.encode()
.toUri();
public MultiValueMap<String, String> toMultiValueMap(){
var map = new LinkedMultiValueMap<String, String>();
map.add("query",query);
map.add("display",String.valueOf(display));
map.add("start",String.valueOf(start));
map.add("sort", sort);
return map;
}
HashMap | TreeMap | LinkedHashMap |
---|---|---|
Map의 기본형식이다. | HashMap과 동일한 기능에 추가 옵션이들어간다. | HashMap과 동일한 기능에 추가 옵션이들어간다. |
key-value 한쌍으로 데이터를 저장하며 중복된 키가 존재하지않는다. | TreeMap은 데이터가 들어올때마다 Key값에따라 알아서 자동으로 정렬이된다. | LinkedHashMap은 입력순서를 보장한다. |
Map에있는 데이터(value)를 뽑을때, 키를 기준으로 가져온다. | ex) HashMap에 C B A로 입력 -> 값을 출력할때 C B A그대로 나온다는 보장이없다. | |
value 뽑을 때 시간복잡도 : O(1) | LinkedHashMap은 이와같은 문제를 해결해준다. |
MultiValueMap<String, Integer> multiValueMap = new MultiValueMap<>();
multiValueMap.add("A", 150);
multiValueMap.add("A", 280);
multiValueMap.add("A", 480);
List<Integer> a = multiValueMap.get("A");
for(int data : a){
System.out.println("data = "+data);
}
// 출력 결과
// data = 150
// data = 280
// data = 480
출처
자바 Map 과 MultiValueMap의 대해서
[Spring] MultiValueMap은 무엇일까?
TIL - HttpHeaders | LinkedMultiValueMap | 카카오 소셜 로그인 구현 중 오류