Goyave - Rejoignez et divisez les collections

1. Vue d'ensemble

Dans ce didacticiel, nous allons apprendre à utiliser le Joiner et le Splitter dans la bibliothèque Guava . Nous convertirons des collections en String avec le Joiner et nous diviserons une String en une collection avec le Splitter .

2. Convertir la liste en chaîne à l' aide de Joiner

Commençons par un exemple simple pour joindre une liste dans une chaîne à l' aide de Joiner . Dans l'exemple suivant, nous joignons une liste de noms en une seule chaîne en utilisant la virgule «,» comme séparateur:

@Test public void whenConvertListToString_thenConverted() { List names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); String result = Joiner.on(",").join(names); assertEquals(result, "John,Jane,Adam,Tom"); }

3. Convertir la carte en chaîne à l' aide de Joiner

Ensuite, voyons comment utiliser Joiner pour convertir une carte en chaîne . Dans l'exemple suivant, nous utilisons withKeyValueSeparator () pour joindre la clé avec sa valeur:

@Test public void whenConvertMapToString_thenConverted() { Map salary = Maps.newHashMap(); salary.put("John", 1000); salary.put("Jane", 1500); String result = Joiner.on(" , ").withKeyValueSeparator(" = ") .join(salary); assertThat(result, containsString("John = 1000")); assertThat(result, containsString("Jane = 1500")); }

4. Rejoignez des collections imbriquées

Voyons maintenant comment joindre des collections imbriquées dans une chaîne . Dans l'exemple suivant, nous joignons le résultat de la transformation de chaque liste en chaîne :

@Test public void whenJoinNestedCollections_thenJoined() { List
    
      nested = Lists.newArrayList( Lists.newArrayList("apple", "banana", "orange"), Lists.newArrayList("cat", "dog", "bird"), Lists.newArrayList("John", "Jane", "Adam")); String result = Joiner.on(";").join(Iterables.transform(nested, new Function
     
      () { @Override public String apply(List input) { return Joiner.on("-").join(input); } })); assertThat(result, containsString("apple-banana-orange")); assertThat(result, containsString("cat-dog-bird")); assertThat(result, containsString("apple-banana-orange")); }
     
    

5. Gérer les valeurs nulles lors de l'utilisation de Joiner

Voyons maintenant différentes façons de gérer les valeurs nulles lors de l'utilisation de Joiner.

Pour ignorer les valeurs nulles lors de la jonction de la collection, utilisez skipNulls () comme dans l'exemple suivant:

@Test public void whenConvertListToStringAndSkipNull_thenConverted() { List names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom"); String result = Joiner.on(",").skipNulls().join(names); assertEquals(result, "John,Jane,Adam,Tom"); }

Si vous ne souhaitez pas ignorer les valeurs nulles et que vous souhaitez les remplacer à la place , utilisez useForNull () comme dans l'exemple suivant:

@Test public void whenUseForNull_thenUsed() { List names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom"); String result = Joiner.on(",").useForNull("nameless").join(names); assertEquals(result, "John,nameless,Jane,Adam,Tom"); }

Notez que useForNull () ne modifie pas la liste d'origine, il n'affecte que la sortie de la jointure.

6. Créer une liste à partir d'une chaîne à l' aide de Splitter

Voyons maintenant comment diviser une chaîne en une liste . Dans l'exemple suivant, nous utilisons le séparateur «-» pour diviser la chaîne d' entrée en liste :

@Test public void whenCreateListFromString_thenCreated() { String input = "apple - banana - orange"; List result = Splitter.on("-").trimResults() .splitToList(input); assertThat(result, contains("apple", "banana", "orange")); }

Notez que trimResults () supprime les espaces de début et de fin des sous-chaînes résultantes.

7. Créer une carte à partir d'une chaîne à l' aide de Splitter

Ensuite, voyons comment créer une carte à partir d'une chaîne à l'aide de Splitter. Dans l'exemple suivant, nous utilisons withKeyValueSeparator () pour diviser une chaîne en une carte :

@Test public void whenCreateMapFromString_thenCreated() { String input = "John=first,Adam=second"; Map result = Splitter.on(",") .withKeyValueSeparator("=") .split(input); assertEquals("first", result.get("John")); assertEquals("second", result.get("Adam")); }

8. Chaîne divisée avec plusieurs séparateurs

Voyons maintenant comment diviser une chaîne avec plusieurs séparateurs. Dans l'exemple suivant, nous utilisons à la fois "." et "," pour diviser notre chaîne :

@Test public void whenSplitStringOnMultipleSeparator_thenSplit() { String input = "apple.banana,,orange,,."; List result = Splitter.onPattern("[.,]") .omitEmptyStrings() .splitToList(input); assertThat(result, contains("apple", "banana", "orange")); }

Notez que omitEmptyStrings () ignore les chaînes vides et ne les ajoute pas à la liste résultante .

9. Fractionner une chaîne à une longueur spécifique

Ensuite - jetons un coup d'œil sur la division d'une chaîne à une longueur spécifique. Dans l'exemple suivant, nous divisons notre chaîne tous les 3 caractères:

@Test public void whenSplitStringOnSpecificLength_thenSplit() { String input = "Hello world"; List result = Splitter.fixedLength(3).splitToList(input); assertThat(result, contains("Hel", "lo ", "wor", "ld")); }

10. Limiter le résultat du fractionnement

Enfin, voyons comment limiter le résultat du fractionnement. Si vous voulez que le séparateur pour arrêter le fractionnement après le numéro spécifique d'éléments - l' utilisation limite () comme dans l'exemple suivant:

@Test public void whenLimitSplitting_thenLimited() { String input = "a,b,c,d,e"; List result = Splitter.on(",") .limit(4) .splitToList(input); assertEquals(4, result.size()); assertThat(result, contains("a", "b", "c", "d,e")); }

11. Conclusion

Dans ce didacticiel, nous avons illustré comment utiliser à la fois le Joiner et le Splitter dans Guava pour effectuer diverses transformations entre les collections et les chaînes.

L'implémentation de tous ces exemples et extraits de code peut être trouvée dans mon projet github Guava - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.