Java 8 StringJoiner

1. Einleitung

StringJoiner ist eine neue Klasse, die in Java 8 unter dem Paket java.util hinzugefügt wurde .

Einfach ausgedrückt, kann es zum Verbinden von Strings verwendet werden, wobei ein Trennzeichen, ein Präfix und ein Suffix verwendet werden.

2. Elemente hinzufügen

Wir können Strings mit der add () -Methode hinzufügen :

@Test public void whenAddingElements_thenJoinedElements() { StringJoiner joiner = new StringJoiner(",", PREFIX, SUFFIX); joiner.add("Red") .add("Green") .add("Blue"); assertEquals(joiner.toString(), "[Red,Green,Blue]"); }

Wenn wir alle Elemente einer Liste verbinden möchten, müssen wir die Liste durchlaufen. Leider gibt es keine einfache Möglichkeit, dies mit StringJoiner zu tun :

@Test public void whenAddingListElements_thenJoinedListElements() { List rgbList = new ArrayList(); rgbList.add("Red"); rgbList.add("Green"); rgbList.add("Blue"); StringJoiner rgbJoiner = new StringJoiner( ",", PREFIX, SUFFIX); for (String color : rgbList) { rgbJoiner.add(color); } assertEquals(rgbJoiner.toString(), "[Red,Green,Blue]"); }

3. Aufbau

Um eine Instanz von StringJoiner zu erstellen, müssen wir das Trennzeichen erwähnen. Optional können wir auch das Präfix und Suffix angeben, die im Ergebnis vorhanden sein sollen:

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

Wir verwenden toString () , um den aktuellen Wert vom Joiner abzurufen.

Beachten Sie die von den Joinern zurückgegebenen Standardwerte. Ein Joiner ohne Präfix und Suffix gibt einen leeren String zurück, während Joiner mit Präfix und Suffix einen String zurückgibt , der sowohl Präfix als auch Suffix enthält.

Wir können den zurückgegebenen Standard- String mithilfe von setEmptyValue () ändern :

@Test public void whenEmptyJoinerWithEmptyValue_thenDefaultValue() { StringJoiner joiner = new StringJoiner(","); joiner.setEmptyValue("default"); assertEquals(joiner.toString(), "default"); } @Test public void whenEmptyJoinerWithPrefixSuffixAndEmptyValue_thenDefaultValue() { StringJoiner joiner = new StringJoiner(",", PREFIX, SUFFIX); joiner.setEmptyValue("default"); assertEquals(joiner.toString(), "default"); }

Hier geben beide Joiner die Konstante EMPTY_JOINER zurück .

Der Standardwert wird nur zurückgegeben, wenn der StringJoiner leer ist.

4. Joiner zusammenführen

Wir können zwei Joiner mit merge () zusammenführen . Es fügt den Inhalt des angegebenen StringJoiner ohne Präfix und Suffix als nächstes Element hinzu:

@Test public void whenMergingJoiners_thenReturnMerged() { StringJoiner rgbJoiner = new StringJoiner( ",", PREFIX, SUFFIX); StringJoiner cmybJoiner = new StringJoiner( "-", PREFIX, SUFFIX); rgbJoiner.add("Red") .add("Green") .add("Blue"); cmybJoiner.add("Cyan") .add("Magenta") .add("Yellow") .add("Black"); rgbJoiner.merge(cmybJoiner); assertEquals( rgbJoiner.toString(), "[Red,Green,Blue,Cyan-Magenta-Yellow-Black]"); }

Beachten Sie, wie "-" verwendet wird, um den Inhalt von cmybJoiner zu verketten, während rgbJoiner weiterhin "," verwendet.

5. Stream- API

Das ist so ziemlich alles, was wir mit StringJoiner machen können .

Es gibt noch eine indirekte Verwendung in der Stream- API:

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

Collectors.joining () verwendet intern StringJoiner , um den Verknüpfungsvorgang auszuführen.

6. Fazit

In diesem kurzen Tutorial haben wir die Verwendung der StringJoiner- Klasse veranschaulicht . Insgesamt wirkt der StringJoiner sehr primitiv und geht nicht auf einige grundlegende Anwendungsfälle wie das Zusammenfügen der Elemente einer Liste ein. Es scheint in erster Linie für Sammler gedacht zu sein .

Wenn StringJoiner unsere Anforderungen nicht erfüllt, gibt es andere beliebte und leistungsstarke Bibliotheken wie Guava .

Und wie immer finden Sie alle Quellen auf GitHub.