Guava - Verzamelingen samenvoegen en splitsen

1. Overzicht

In deze zelfstudie leren we hoe u de Schrijnwerker en Splitser in de Guava-bibliotheek. We zetten verzamelingen om in een string met de Schrijnwerker en we splitsen een String in een verzameling met de Splitser.

2. Converteren Lijst in Draad Gebruik makend van Schrijnwerker

Laten we beginnen met een eenvoudig voorbeeld om lid te worden van een Lijst in een Draad gebruik makend van Schrijnwerker. In het volgende voorbeeld sluiten we ons aan bij een Lijst van namen in één Draad met de komma "," als scheidingsteken:

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

3. Omzetten Kaart naar Draad Gebruik makend van Schrijnwerker

Volgende - laten we eens kijken hoe we het kunnen gebruiken Schrijnwerker om een Kaart naar een Draad. In het volgende voorbeeld gebruiken we withKeyValueSeparator () om de sleutel met zijn waarde samen te voegen:

@Test openbare leegte whenConvertMapToString_thenConverted () {Kaartsalaris = Maps.newHashMap (); salaris.put ("Jan", 1000); salaris.put ("Jane", 1500); String resultaat = Joiner.on (",") .withKeyValueSeparator ("=") .join (salaris); assertThat (resultaat, bevatString ("John = 1000")); assertThat (resultaat, bevatString ("Jane = 1500")); }

4. Voeg geneste verzamelingen samen

Laten we nu eens kijken hoe we geneste verzamelingen kunnen samenvoegen tot een Draad. In het volgende voorbeeld voegen we het resultaat van elk transformeren samen Lijst naar een Draad:

@Test openbare leegte whenJoinNestedCollections_thenJoined () {List nested = Lists.newArrayList (Lists.newArrayList ("apple", "banana", "orange"), Lists.newArrayList ("cat", "dog", "bird"), Lists.newArrayList ("John", "Jane "," Adam ")); String resultaat = Joiner.on (";"). Join (Iterables.transform (geneste, nieuwe functie() {@Override public String apply (lijstinvoer) {return Joiner.on ("-"). Join (invoer); }})); assertThat (resultaat, bevatString ("appel-banaan-sinaasappel")); assertThat (resultaat, bevatString ("kat-hond-vogel")); assertThat (resultaat, bevatString ("appel-banaan-sinaasappel")); }

5. Omgaan met null-waarden tijdens het gebruik Schrijnwerker

Laten we nu verschillende manieren bekijken om met null-waarden om te gaan tijdens het gebruik van Joiner.

Naar sla null-waarden over tijdens het toetreden tot collectiegebruik skipNulls () zoals in het volgende voorbeeld:

@Test public void whenConvertListToStringAndSkipNull_thenConverted () {List names = Lists.newArrayList ("John", null, "Jane", "Adam", "Tom"); String resultaat = Joiner.on (","). SkipNulls (). Join (namen); assertEquals (resultaat, "John, Jane, Adam, Tom"); }

Als u geen null-waarden wilt overslaan en dat wel wilt vervang ze in plaats daarvan, gebruik useForNull () zoals in het volgende voorbeeld:

@Test public void whenUseForNull_thenUsed () {List names = Lists.newArrayList ("John", null, "Jane", "Adam", "Tom"); String resultaat = Joiner.on (","). UseForNull ("naamloos"). Join (namen); assertEquals (resultaat, "John, naamloos, Jane, Adam, Tom"); }

Let daar op useForNull () verandert de originele lijst niet, het heeft alleen invloed op de uitvoer van de join.

6. Creëer Lijst Van Draad Gebruik makend van Splitser

Laten we nu eens kijken hoe we een Draad in een Lijst. In het volgende voorbeeld gebruiken we het scheidingsteken "-" om de invoer te splitsen Draad naar Lijst:

@Test openbare leegte whenCreateListFromString_thenCreated () {String input = "appel - banaan - oranje"; Lijstresultaat = Splitter.on ("-"). TrimResults () .splitToList (input); assertThat (resultaat, bevat ("appel", "banaan", "sinaasappel")); }

Let daar op trimResults () verwijdert de voorste en achterste witruimte uit de resulterende subtekenreeksen.

7. Creëer Kaart Van Draad Gebruik makend van Splitser

Vervolgens - laten we eens kijken hoe Map maken van string met behulp van splitter. In het volgende voorbeeld gebruiken we withKeyValueSeparator () om een Draad in een Kaart:

@Test openbare leegte whenCreateMapFromString_thenCreated () {String input = "John = eerste, Adam = tweede"; Kaartresultaat = Splitter.on (",") .withKeyValueSeparator ("=") .split (invoer); assertEquals ("first", result.get ("John")); assertEquals ("second", result.get ("Adam")); }

8. Splitsen Draad Met meerdere scheidingstekens

Laten we nu eens kijken hoe we een Draad met meerdere scheidingstekens. In het volgende voorbeeld gebruiken we beide "." en "," om onze te splitsen Draad:

@Test openbare leegte whenSplitStringOnMultipleSeparator_thenSplit () {String input = "apple.banana ,, oranje ,,."; Lijstresultaat = Splitter.onPattern ("[.,]") .OmitEmptyStrings () .splitToList (invoer); assertThat (resultaat, bevat ("appel", "banaan", "sinaasappel")); }

Let daar op weglatenEmptyStrings () negeert lege strings en voegt ze niet toe aan het resulterende Lijst.

9. Splits een Draad op specifieke lengte

Vervolgens - laten we eens kijken naar het splitsen van een Draad op specifieke lengte. In het volgende voorbeeld splitsen we onze Draad elke 3 karakters:

@Test openbare leegte whenSplitStringOnSpecificLength_thenSplit () {String input = "Hallo wereld"; Lijstresultaat = Splitter.fixedLength (3) .splitToList (invoer); assertThat (resultaat, bevat ("Hel", "lo", "wor", "ld")); }

10. Beperk het splitresultaat

Eindelijk - laten we eens kijken hoe we het splitsingsresultaat kunnen beperken. Als je de Splitser naar stop met splitsen na een bepaald aantal items - gebruik limiet() zoals in het volgende voorbeeld:

@Test openbare leegte whenLimitSplitting_thenLimited () {String input = "a, b, c, d, e"; Lijstresultaat = Splitter.on (",") .limit (4) .splitToList (invoer); assertEquals (4, result.size ()); assertThat (resultaat, bevat ("a", "b", "c", "d, e")); }

11. Conclusie

In deze tutorial hebben we geïllustreerd hoe u beide Schrijnwerker en Splitser in Guava om verschillende transformaties tussen verzamelingen en snaren uit te voeren.

De implementatie van al deze voorbeelden en codefragmenten is te vinden in mijn Guava github-project - dit is een op Eclipse gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.