Рубрики
Без рубрики

Преобразование карты в строку в Java

Узнайте, как преобразовать карту в строку и наоборот, используя как основные методы Java, так и сторонние библиотеки.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы сосредоточимся на преобразовании из Map в String и наоборот.

Во-первых, мы посмотрим, как достичь этого с помощью основных методов Java, а затем мы будем использовать некоторые сторонние библиотеки.

2. Пример базовой карты

Во всех примерах мы будем использовать одну и ту же реализацию Map :

Map wordsByKey = new HashMap<>();
wordsByKey.put(1, "one");
wordsByKey.put(2, "two");
wordsByKey.put(3, "three");
wordsByKey.put(4, "four");

3. Преобразуйте карту в строку путем итерации

Давайте переберем все ключи в нашей карте и для каждого из них добавим комбинацию ключ-значение к нашему результирующему объекту StringBuilder |.

Для целей форматирования мы можем заключить результат в фигурные скобки:

public String convertWithIteration(Map 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 .

Во-вторых, мы сопоставляем каждый ключ с читаемой человеком строкой .

Наконец, мы объединяем эти значения и для удобства добавляем некоторые правила форматирования с помощью метода Collectors.joining() :

public String convertWithStream(Map map) {
    String mapAsString = map.keySet().stream()
      .map(key -> key + "=" + map.get(key))
      .collect(Collectors.joining(", ", "{", "}"));
    return mapAsString;
}

5. Преобразуйте карту в строку с помощью Guava

Давайте добавим Guava в наш проект и посмотрим, как мы можем добиться преобразования в одной строке кода:


    com.google.guava
    guava
    27.0.1-jre

Чтобы выполнить преобразование с помощью класса Joiner Guava, нам нужно определить разделитель между различными записями Map и разделитель между ключами и значениями:

public String convertWithGuava(Map map) {
    return Joiner.on(",").withKeyValueSeparator("=").join(map);
}

6. Преобразуйте карту в строку с помощью Apache Commons

Чтобы использовать Apache Commons , давайте сначала добавим следующую зависимость:


    org.apache.commons
    commons-collections4
    4.2

Соединение очень простое – нам просто нужно вызвать StringUtils.метод join :

public String convertWithApache(Map map) {
    return StringUtils.join(map);
}

Одно особое упоминание относится к методу debug Print , доступному в Apache Commons. Это очень полезно для целей отладки.

Когда мы позвоним:

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 , давайте определим, где нужно разделить и как извлечь ключи и значения:

public Map convertWithStream(String mapAsString) {
    Map map = Arrays.stream(mapAsString.split(","))
      .map(entry -> entry.split("="))
      .collect(Collectors.toMap(entry -> entry[0], entry -> entry[1]));
    return map;
}

8. Преобразуйте строку в карту с помощью Guava

Более компактная версия вышеизложенного состоит в том, чтобы полагаться на гуаву для разделения и преобразования для нас в однострочном процессе:

public Map convertWithGuava(String mapAsString) {
    return Splitter.on(',').withKeyValueSeparator('=').split(mapAsString);
}

9. Заключение

В этом уроке мы рассмотрели, как преобразовать Map в String и наоборот, используя как основные методы Java, так и сторонние библиотеки.

Реализацию всех этих примеров можно найти на GitHub .