Javaでの文字列変換へのマップ

1. 概要

このチュートリアルでは、_Map_から_String_への変換とその逆に焦点を当てます。
まず、コアJavaメソッドを使用してこれらを実現する方法を確認し、その後、いくつかのサードパーティライブラリを使用します。

2. 基本的な_Map_の例

すべての例で、同じ_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_を_String_に変換します

_Map_のすべてのキーを反復処理し、それぞれについて、結果の__https://www.baeldung.com/java-string-builder-string-buffer [StringBuilder] __objectにキーと値の組み合わせを追加します。
書式設定のために、結果を中括弧で囲むことができます。
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();
}
_Map_を正しく変換したかどうかを確認するには、次のテストを実行しましょう。
@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_に変換する

ストリームを使用して変換を実行するには、最初に利用可能な_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を使用して_Map_を_String_に変換する

https://search.maven.org/search?q=g:com.google.guava%20AND%20a:guava[Guava]をプロジェクトに追加して、1行のコードで変換を実現する方法を見てみましょう。
<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を使用して_Map_を_String_に変換する

https://search.maven.org/search?q=a:commons-collections4%20AND%20g:org.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. ストリームを使用して_String_を_Map_に変換する

_String_から_Map_への変換を実行するには、分割する場所とキーと値を抽出する方法を定義しましょう。
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を使用して_String_を_Map_に変換する

上記のよりコンパクトなバージョンは、グアバを使用して、1行のプロセスで分割と変換を行います。
public Map<String, String> convertWithGuava(String mapAsString) {
    return Splitter.on(',').withKeyValueSeparator('=').split(mapAsString);
}

9. 結論

このチュートリアルでは、_Map_を_String_に変換する方法と、コアJavaメソッドとサードパーティライブラリの両方を使用する他の方法について説明しました。
これらすべての例の実装は、https://github.com/eugenp/tutorials/tree/master/java-collections-maps [GitHubで]にあります。