Java 8 StringJoiner

1. Inleiding

StringJoiner is een nieuwe klasse toegevoegd in Java 8 onder java.util pakket.

Simpel gezegd, het kan worden gebruikt om mee te doen Snaren gebruikmakend van een scheidingsteken, voorvoegsel en achtervoegsel.

2. Elementen toevoegen

We kunnen toevoegen Snaren de ... gebruiken toevoegen() methode:

@Test openbare leegte whenAddingElements_thenJoinedElements () {StringJoiner joiner = nieuwe StringJoiner (",", PREFIX, SUFFIX); joiner.add ("Rood") .add ("Groen") .add ("Blauw"); assertEquals (joiner.toString (), "[Rood, Groen, Blauw]"); }

Als we alle elementen van een lijst willen samenvoegen, moeten we de lijst doorlopen. Helaas is er geen gemakkelijke manier om dit te doen met StringJoiner:

@Test openbare leegte whenAddingListElements_thenJoinedListElements () {List rgbList = nieuwe ArrayList (); rgbList.add ("Rood"); rgbList.add ("Groen"); rgbList.add ("Blauw"); StringJoiner rgbJoiner = nieuwe StringJoiner (",", PREFIX, SUFFIX); voor (String kleur: rgbList) {rgbJoiner.add (kleur); } assertEquals (rgbJoiner.toString (), "[Rood, Groen, Blauw]"); }

3. Constructie

Om een ​​instantie van StringJoiner, we moeten het scheidingsteken vermelden. Optioneel kunnen we ook het voorvoegsel en achtervoegsel specificeren dat in het resultaat aanwezig moet zijn:

private String PREFIX = "["; private String SUFFIX = "]"; @Test openbare leegte whenEmptyJoinerWithoutPrefixSuffix_thenEmptyString () {StringJoiner joiner = nieuwe StringJoiner (","); assertEquals (0, joiner.toString (). length ()); } @Test openbare leegte whenEmptyJoinerJoinerWithPrefixSuffix_thenPrefixSuffix () {StringJoiner joiner = nieuwe StringJoiner (",", PREFIX, SUFFIX); assertEquals (joiner.toString (), PREFIX + SUFFIX); }

We gebruiken toString () om de huidige waarde van de joiner te krijgen.

Let op de standaardwaarden die worden geretourneerd door de schrijnwerkers. EEN Schrijnwerker zonder voorvoegsel en achtervoegsel geeft een lege waarde Draad terwijl joiner met voorvoegsel en achtervoegsel een retourneert Draad met zowel voor- als achtervoegsel.

We kunnen de standaard wijzigen Draad geretourneerd door te gebruiken setEmptyValue ():

@Test openbare leegte whenEmptyJoinerWithEmptyValue_thenDefaultValue () {StringJoiner joiner = nieuwe StringJoiner (","); joiner.setEmptyValue ("standaard"); assertEquals (joiner.toString (), "default"); } @Test openbare leegte whenEmptyJoinerWithPrefixSuffixAndEmptyValue_thenDefaultValue () {StringJoiner joiner = nieuwe StringJoiner (",", PREFIX, SUFFIX); joiner.setEmptyValue ("standaard"); assertEquals (joiner.toString (), "default"); }

Hier geven beide schrijnwerkers het EMPTY_JOINER constante.

De standaardwaarde wordt alleen geretourneerd als de StringJoiner is leeg.

4. Voeg schrijvers samen

We kunnen twee schrijnwerkers samenvoegen met samenvoegen(). Het voegt de inhoud van het gegeven toe StringJoinerzonder voorvoegsel en achtervoegsel als het volgende element:

@Test openbare leegte whenMergingJoiners_thenReturnMerged () {StringJoiner rgbJoiner = nieuwe StringJoiner (",", PREFIX, SUFFIX); StringJoiner cmybJoiner = nieuwe StringJoiner ("-", PREFIX, SUFFIX); rgbJoiner.add ("Rood") .add ("Groen") .add ("Blauw"); cmybJoiner.add ("Cyaan") .add ("Magenta") .add ("Geel") .add ("Zwart"); rgbJoiner.merge (cmybJoiner); assertEquals (rgbJoiner.toString (), "[Rood, Groen, Blauw, Cyaan-Magenta-Geel-Zwart]"); }

Merk op hoe “-“ wordt gebruikt om inhoud van cmybJoiner terwijl rgbJoiner nog steeds gebruiken “,”.

5. Stroom API

Dat is zo ongeveer alles waarmee we kunnen doen StringJoiner.

Er is nog een indirect gebruik dat kan worden gevonden in het Stroom API:

@Test public void whenUsedWithinCollectors_thenJoined () {List rgbList = Arrays.asList ("Red", "Green", "Blue"); String commaSeparatedRGB = rgbList.stream () .map (kleur -> color.toString ()) .collect (Collectors.joining (",")); assertEquals (commaSeparatedRGB, "Rood, Groen, Blauw"); }

Collectors.joining () intern gebruikt StringJoiner om de samenvoegbewerking uit te voeren.

6. Conclusie

In deze korte handleiding hebben we geïllustreerd hoe u de StringJoiner klasse. Over het algemeen de StringJoiner lijkt erg primitief en biedt geen oplossing voor enkele basisgebruiksgevallen, zoals het samenvoegen van de elementen van een lijst. Het lijkt primair ontworpen voor Verzamelaars.

Als StringJoiner voldoet niet aan onze eisen, er zijn andere populaire en krachtige bibliotheken, zoals Guave.

En, zoals gewoonlijk, zijn alle bronnen te vinden op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found