Java中map到string字符串的轉換

1.概述

在本教程中,我們將重點介紹從MapString的轉換以及其他方法。

首先,我們將看到如何使用核心Java方法來實現這些目標,然後,我們將使用一些第三方庫。

2.基本地圖示例

在所有示例中,我們將使用相同的Map實現:

Map<Integer, String> wordsByKey = new HashMap<>();

 wordsByKey.put(1, "one");

 wordsByKey.put(2, "two");

 wordsByKey.put(3, "three");

 wordsByKey.put(4, "four");

3.通過迭代將映射轉換為字符串

讓我們遍歷Map中的所有鍵,並針對它們中的每一個,將鍵值組合附加到我們生成的StringBuilder對像中。

為了格式化,我們可以將結果包裝在大括號中:

public String convertWithIteration(Map<Integer, ?> map) {

 StringBuilder mapAsString = new StringBuilder("{");

 for (Integer key : map.keySet()) {

 mapAsString.append(key + "=" + map.get(key) + ", ");

 }

 mapAsString.delete(mapAsString.length()-2, mapAsString.length()).append("}");

 return mapAsString.toString();

 }

要檢查我們是否正確轉換了地圖,請運行以下測試:

@Test

 public void givenMap_WhenUsingIteration_ThenResultingStringIsCorrect() {

 String mapAsString = MapToString.convertWithIteration(wordsByKey);

 Assert.assertEquals("{1=one, 2=two, 3=three, 4=four}", mapAsString);

 }

4.使用Java流將映射轉換為字符串

要使用流執行轉換,我們首先需要根據可用的Map鍵創建一個流。

其次,我們將每個鍵映射到人類可讀的String。

最後,我們將這些值連接起來,為了方便起見,我們使用Collectors.joining()方法添加了一些格式設置規則:

public String convertWithStream(Map<Integer, ?> map) {

 String mapAsString = map.keySet().stream()

 .map(key -> key + "=" + map.get(key))

 .collect(Collectors.joining(", ", "{", "}"));

 return mapAsString;

 }

5.使用番石榴將映射轉換為字符串

讓我們將Guava添加到我們的項目中,看看如何在一行代碼中實現轉換:

<dependency>

 <groupId>com.google.guava</groupId>

 <artifactId>guava</artifactId>

 <version>27.0.1-jre</version>

 </dependency>

要使用Guava的Joiner類執行轉換,我們需要定義不同Map條目之間的分隔符以及鍵和值之間的分隔符:

public String convertWithGuava(Map<Integer, ?> map) {

 return Joiner.on(",").withKeyValueSeparator("=").join(map);

 }

6.使用Apache Commons將映射轉換為字符串

要使用Apache Commons ,我們首先添加以下依賴項:

<dependency>

 <groupId>org.apache.commons</groupId>

 <artifactId>commons-collections4</artifactId>

 <version>4.2</version>

 </dependency>

聯接非常簡單–我們只需要調用StringUtils.join方法即可:

public String convertWithApache(Map map) {

 return StringUtils.join(map);

 }

特別要提到的是Apache Commons中可用的debugPrint方法。這對於調試目的非常有用。

當我們打電話給:

MapUtils.debugPrint(System.out, "Map as String", wordsByKey);

調試文本將被寫入控制台:

Map as String =

 {

 1 = one java.lang.String

 2 = two java.lang.String

 3 = three java.lang.String

 4 = four java.lang.String

 } java.util.HashMap

7.使用流將字符串轉換為映射

為了執行從StringMap的轉換,讓我們定義分割位置以及如何提取鍵和值:

public Map<String, String> convertWithStream(String mapAsString) {

 Map<String, String> map = Arrays.stream(mapAsString.split(","))

 .map(entry -> entry.split("="))

 .collect(Collectors.toMap(entry -> entry[0], entry -> entry[1]));

 return map;

 }

8.使用番石榴將字符串轉換為地圖

上面的一個更緊湊的版本是依靠Guava在單行過程中為我們進行拆分和轉換:

public Map<String, String> convertWithGuava(String mapAsString) {

 return Splitter.on(',').withKeyValueSeparator('=').split(mapAsString);

 }

9.結論

在本教程中,我們了解瞭如何將Map轉換為String以及如何同時使用核心Java方法和第三方庫。

所有這些示例的實現都可以在GitHub上找到