將 Map 轉換為 Spring MultiValueMap
1. 概述
在本教程中,我們將把Map
轉換為 Spring MultiValueMap
並透過一個清晰的範例來理解它。
在 Spring 框架中, MultiValueMap
是一種專門的映射,它針對單一鍵保存多個值。它對於處理 HTTP 請求參數、標頭以及一個鍵可能對應多個值的其他場景很有幫助。將標準Map
轉換為MultiValueMap
可能是 Spring 應用程式中的常見需求。
2.什麼是MultiValueMap
?
MultiValueMap
是 Spring 提供的一個接口,它擴展了Map<K, List<V>>
接口。它允許我們針對單一鍵儲存多個值。
最常用的實作是LinkedMultiValueMap
。
3. 將 Map 轉換為 Spring MultiValueMap
方法
假設我們有一個Map<String, List<String>>
,我們希望轉換為MultiMap<String, String>.
我們可以這樣做。
我們應該確保我們的專案包含 Spring 框架。如果我們使用 Maven,我們將以下依賴項新增到pom.xml
中:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.1.7</version>
</dependency>
作為初始步驟,我們將使用一些資料來建立一個範例Map<String, List<String>>
:
Map<String, List<String>> map = new HashMap<>();
map.put("rollNo", Arrays.asList("4", "2", "7", "3"));
map.put("name", Arrays.asList("John", "Alex", "Maria", "Jack"));
map.put("hobbies", Arrays.asList("Badminton", "Reading novels", "Painting", "Cycling"));
3.1.使用手動迭代
我們可以使用正常迭代將Map
轉換為MultiValueMap
:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
multiValueMap.put(entry.getKey(), entry.getValue());
}
上面的程式碼將Map<String, List<String>>
轉換為MultiValueMap<String, String>
。我們初始化一個新的LinkedMultiValueMap
並迭代原始映射中的每個條目,將每個鍵及其關聯的值列表加入MultiValueMap
。
此結構在 Spring MVC 中特別有用,用於處理具有與單一鍵關聯的多個值的表單資料或查詢參數。
3.2.使用CollectionUtils.toMultiValueMap()
Spring框架在CollectionUtils
中提供了一個實用方法,可以直接將Map<K, List<V>>
轉換為MultiValueMap<K,V>
:
MultiValueMap<String, String> multiValueMap = CollectionUtils.toMultiValueMap(map);
3.3.使用 Java 流
Java Streams API 也可以用於以更實用的程式設計風格執行轉換:
MultiValueMap<String, String> multiValueMap = map.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedMultiValueMap::new));
此程式碼使用 Java Streams 將Map<String, List<String>>
轉換為MultiValueMap<String, String>
。它將映射條目收集到新的LinkedMultiValueMap
中,保留原始映射的鍵值結構。
4。
在本文中,我們了解如何將Map
轉換為MultiValueMap
。透過遵循上述步驟,我們可以輕鬆地在 Spring 應用程式中轉換和利用MultiValueMap
,使我們的程式碼在處理複雜資料結構時更加通用且易於管理。
我們看到了多種方法,每種方法都有其優點。選擇最適合我們的編碼風格和應用程式要求的方法非常重要。這些方法都將幫助我們有效地處理 Spring 應用程式中一個鍵映射到多個值的場景。
所有這些範例的源代碼都可以在 GitHub 上取得。