Guava - Unisci e dividi le raccolte

1. Panoramica

In questo tutorial, impareremo come usare il falegname e splitter nella biblioteca Guava . Convertiremo le raccolte in una stringa con il Joiner e divideremo una stringa in una raccolta con lo Splitter .

2. Converti elenco in stringa utilizzando Joiner

Cominciamo con un semplice esempio per unire una lista in una stringa usando Joiner . Nell'esempio seguente, uniamo un elenco di nomi in una stringa utilizzando la virgola "," come separatore:

@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. Converti mappa in stringa utilizzando Joiner

Successivamente, vediamo come utilizzare Joiner per convertire una mappa in una stringa . Nell'esempio seguente, usiamo withKeyValueSeparator () per unire la chiave con il suo valore:

@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. Unisci raccolte nidificate

Vediamo ora come unire raccolte annidate in una stringa . Nell'esempio seguente, uniamo il risultato della trasformazione di ogni List in una String :

@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. Gestire i valori nulli durante l'utilizzo di Joiner

Vediamo ora diversi modi per gestire i valori nulli durante l'utilizzo di Joiner.

Per saltare i valori null durante l'unione alla raccolta, utilizzare skipNulls () come nell'esempio seguente:

@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"); }

Se non vuoi saltare i valori null e vuoi sostituirli invece , usa useForNull () come nell'esempio seguente:

@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"); }

Nota che useForNull () non modifica l'elenco originale, influisce solo sull'output del join.

6. Creare un elenco dalla stringa utilizzando Splitter

Ora vediamo come dividere una stringa in una lista . Nell'esempio seguente, utilizziamo il separatore "-" per suddividere la stringa di input in List :

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

Notare che trimResults () rimuove gli spazi bianchi iniziali e finali dalle sottostringhe risultanti.

7. Crea mappa dalla stringa utilizzando Splitter

Avanti: vediamo come creare una mappa da una stringa usando Splitter. Nell'esempio seguente, usiamo withKeyValueSeparator () per dividere una stringa in una mappa :

@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. Stringa divisa con più separatori

Ora vediamo come dividere una stringa con più separatori. Nell'esempio seguente, utilizziamo entrambi "." e "," per dividere la nostra stringa :

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

Notare che omitEmptyStrings () ignora le stringhe vuote e non le aggiunge all'elenco risultante .

9. Dividi una stringa a una lunghezza specifica

Avanti: diamo un'occhiata alla divisione di una stringa a una lunghezza specifica. Nell'esempio seguente, dividiamo la nostra stringa ogni 3 caratteri:

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

10. Limita il risultato della divisione

Infine, vediamo come limitare il risultato della divisione. Se si desidera che il divisore per fermare la scissione dopo il numero specifico di elementi - l'uso limite () come nel seguente esempio:

@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. Conclusione

In questo tutorial abbiamo illustrato come utilizzare sia Joiner che Splitter in Guava per eseguire una varietà di trasformazioni tra raccolte e stringhe.

L'implementazione di tutti questi esempi e frammenti di codice può essere trovata nel mio progetto GitHub Guava : questo è un progetto basato su Eclipse, quindi dovrebbe essere facile da importare ed eseguire così com'è.