在本教程中,我們將把Map 轉換為Spring MultiValueMap ,並透過清晰的示例理解它。
在 Spring Framework 中,MultiValueMap是一種專用對映,它針對單個鍵儲存多個值。它有利於處理 HTTP 請求引數、標頭,以及一個鍵可能對應多個值的其他場景。將標準Map轉換為MultiValueMap可能是 Spring 應用程式中的常見要求。
什麼是MultiValueMap?
MultiValueMap是 Spring 提供的一個介面,它擴充套件了Map <K, List<V>>介面。它允許我們根據單個鍵儲存多個值。
最常用的實現是LinkedMultiValueMap。
將 Map 轉換為 Spring MultiValueMap 的方法
假設我們有一個Map<String, List<String>>並且我們想將它轉換為MultiMap<String, String>。
以下是我們可以做到的方法。
我們應該確保我們的專案包含 Spring 框架。如果我們使用Maven,我們將以下依賴項新增到我們的pom.xml中:
<dependency> |
作為初始步驟,我們將建立一個包含一些資料的示例Map<String, List<String>> :
Map<String, List<String>> map = new HashMap<>(); |
1. 使用手動迭代
我們可以使用常規迭代將Map轉換為MultiValueMap :
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>(); |
上面的程式碼將Map<String, List<String>>轉換為MultiValueMap<String, String>。我們初始化一個新的LinkedMultiValueMap並遍歷原始對映中的每個條目,將每個鍵及其關聯的值列表新增到MultiValueMap。
這種結構在 Spring MVC 中特別有用,用於處理與單個鍵關聯的多個值的表單資料或查詢引數。
2. 使用CollectionUtils.toMultiValueMap()
Spring 框架在CollectionUtils中提供了一種實用方法,可以直接將Map<K, List<V>>轉換為MultiValueMap<K,V>:
MultiValueMap<String, String> multiValueMap = CollectionUtils.toMultiValueMap(map); |
3. 使用 Java 流
Java Streams API 還可以用於以更函式式的程式設計風格執行轉換:
MultiValueMap<String, String> multiValueMap = map.entrySet() |
此程式碼使用 Java Streams 將Map<String, List<String>>轉換為MultiValueMap<String, String>。它將對映條目收集到新的LinkedMultiValueMap中,並保留原始對映的鍵值結構。