Conversion de mappage en chaîne en Java

1. Vue d'ensemble

Dans ce didacticiel, nous allons nous concentrer sur la conversion d'une map en chaîne et inversement.

Tout d'abord, nous verrons comment y parvenir en utilisant les méthodes Java de base, puis nous utiliserons des bibliothèques tierces.

2. Exemple de carte de base

Dans tous les exemples, nous allons utiliser la même implémentation de Map :

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

3. Convertir une carte en chaîne par itération

Répétons toutes les clés de notre Map et, pour chacune d'elles, ajoutons la combinaison clé-valeur à notre objet StringBuilder résultant .

À des fins de formatage, nous pouvons mettre le résultat entre accolades:

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(); }

Pour vérifier si nous avons correctement converti notre carte , exécutons le test suivant:

@Test public void givenMap_WhenUsingIteration_ThenResultingStringIsCorrect() { String mapAsString = MapToString.convertWithIteration(wordsByKey); Assert.assertEquals("{1=one, 2=two, 3=three, 4=four}", mapAsString); }

4. Convertir une carte en chaîne à l' aide de flux Java

Pour effectuer une conversion à l'aide de flux, nous devons d'abord créer un flux à partir des clés de carte disponibles .

Deuxièmement, nous mappons chaque clé sur une chaîne lisible par l'homme .

Enfin, nous joignons ces valeurs et, pour des raisons de commodité, nous ajoutons des règles de mise en forme à l'aide de la méthode Collectors.joining () :

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

5. Convertir une carte en chaîne à l' aide de Guava

Ajoutons Guava dans notre projet et voyons comment nous pouvons réaliser la conversion en une seule ligne de code:

 com.google.guava guava 27.0.1-jre 

Pour effectuer la conversion à l'aide de la classe Joiner de Guava , nous devons définir un séparateur entre les différentes entrées de la carte et un séparateur entre les clés et les valeurs:

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

6. Convertir une carte en chaîne à l' aide d'Apache Commons

Pour utiliser Apache Commons, ajoutons d'abord la dépendance suivante:

 org.apache.commons commons-collections4 4.2 

La jointure est très simple - il suffit d'appeler la méthode StringUtils.join :

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

Une mention spéciale va à la méthode debugPrint disponible dans Apache Commons. C'est très utile à des fins de débogage.

Quand nous appelons:

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

Le texte de débogage sera écrit sur la console:

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. Convertir une chaîne en carte à l' aide de flux

Pour effectuer la conversion d'une chaîne en une carte , définissons où se scinder et comment extraire les clés et les valeurs:

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. Convertir une chaîne en carte à l' aide de Guava

Une version plus compacte de ce qui précède consiste à compter sur Guava pour effectuer le fractionnement et la conversion pour nous dans un processus en une ligne:

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

9. Conclusion

Dans ce didacticiel, nous avons vu comment convertir une carte en chaîne et l'inverse en utilisant à la fois les méthodes Java principales et les bibliothèques tierces.

L'implémentation de tous ces exemples se trouve à l'adresse over sur GitHub.