Java 8 StringJoiner
1. Úvod
StringJoiner je nová trieda pridaná do Java 8 pod java.util balíček.
Jednoducho povedané, dá sa použiť na spájanie Struny s využitím oddeľovača, predpony a prípony.
2. Pridávanie prvkov
Môžeme pridať Struny pomocou pridať () metóda:
@Test public void whenAddingElements_thenJoinedElements () {StringJoiner joiner = new StringJoiner (",", PREFIX, SUFFIX); joiner.add ("červená") .add ("zelená") .add ("modrá"); assertEquals (joiner.toString (), "[červená, zelená, modrá]"); }
Ak sa chceme spojiť so všetkými prvkami zoznamu, budeme musieť prechádzať zoznamom. Bohužiaľ neexistuje jednoduchý spôsob, ako to urobiť pomocou StringJoiner:
@Test public void whenAddingListElements_thenJoinedListElements () {List rgbList = new ArrayList (); rgbList.add ("červená"); rgbList.add ("Zelená"); rgbList.add ("modrá"); StringJoiner rgbJoiner = nový StringJoiner (",", PREFIX, SUFFIX); pre (Farba reťazca: rgbList) {rgbJoiner.add (farba); } assertEquals (rgbJoiner.toString (), "[červená, zelená, modrá]"); }
3. Konštrukcia
Vytvoriť inštanciu StringJoiner, musíme spomenúť oddeľovač. Voliteľne môžeme určiť aj predponu a príponu, ktoré by mali byť vo výsledku:
private String PREFIX = "["; private String SUFFIX = "]"; @Test public void whenEmptyJoinerWithoutPrefixSuffix_thenEmptyString () {StringJoiner joiner = new StringJoiner (","); assertEquals (0, joiner.toString (). length ()); } @Test public void whenEmptyJoinerJoinerWithPrefixSuffix_thenPrefixSuffix () {StringJoiner joiner = new StringJoiner (",", PREFIX, SUFFIX); assertEquals (joiner.toString (), PREFIX + SUFFIX); }
Používame natiahnuť() získať aktuálnu hodnotu od stolára.
Všimnite si predvolené hodnoty vrátené stolármi. A Stolár bez predpony a prípony vráti prázdne miesto String zatiaľ čo truhlár s predponou a príponou vráti a String obsahujúci predponu aj príponu.
Môžeme zmeniť predvolené nastavenie String vrátené pomocou setEmptyValue ():
@Test public void whenEmptyJoinerWithEmptyValue_thenDefaultValue () {StringJoiner joiner = new StringJoiner (","); joiner.setEmptyValue ("predvolené"); assertEquals (joiner.toString (), "predvolené"); } @Test public void whenEmptyJoinerWithPrefixSuffixAndEmptyValue_thenDefaultValue () {StringJoiner joiner = new StringJoiner (",", PREFIX, SUFFIX); joiner.setEmptyValue ("predvolené"); assertEquals (joiner.toString (), "predvolené"); }
Tu obidvaja stolári vrátia EMPTY_JOINER konštantný.
Predvolená hodnota sa vráti iba vtedy, keď StringJoiner je prázdny.
4. Zlúčte stolárov
Môžeme zlúčiť dvoch stolárov pomocou zlúčiť(). Doplní obsah daného StringJoinerbez predpony a prípony ako ďalší prvok:
@Test public void whenMergingJoiners_thenReturnMerged () {StringJoiner rgbJoiner = new StringJoiner (",", PREFIX, SUFFIX); StringJoiner cmybJoiner = nový StringJoiner ("-", PREFIX, SUFFIX); rgbJoiner.add ("červená"). add ("zelená"). add ("modrá"); cmybJoiner.add ("azúrová"). add ("purpurová"). add ("žltá"). add ("čierna"); rgbJoiner.merge (cmybJoiner); assertEquals (rgbJoiner.toString (), "[červená, zelená, modrá, azúrová-purpurová-žltá-čierna]"); }
Všimnite si ako “-“ sa používa na zreťazenie obsahu cmybJoiner zatiaľ čo rgbJoiner stále používať “,”.
5. Prúd API
To je skoro všetko, s čím môžeme urobiť StringJoiner.
Existuje ešte jedno nepriame použitie, ktoré možno nájsť v Prúd API:
@Test public void whenUsedWithinCollectors_thenJoined () {List rgbList = Arrays.asList ("červená", "zelená", "modrá"); Reťazec commaSeparatedRGB = rgbList.stream () .map (color -> color.toString ()) .collect (Collectors.joining (",")); assertEquals (commaSeparatedRGB, „červená, zelená, modrá“); }
Collectors.joining () interne používa StringJoiner vykonať spojovaciu operáciu.
6. Záver
V tomto rýchlom výučbe sme ilustrovali, ako používať StringJoiner trieda. Celkovo StringJoiner sa zdá byť veľmi primitívny a nerieši niektoré základné prípady použitia, ako je pripojenie sa k prvkom zoznamu. Zdá sa, že je primárne určený pre Zberatelia.
Ak StringJoiner nespĺňa naše požiadavky, existujú aj ďalšie populárne a výkonné knižnice, ako napr Guava.
A ako obvykle, všetky zdroje nájdete na GitHube.