Guave - Sammlungen verbinden und aufteilen
1. Überblick
In diesem Tutorial lernen wir, wie manthe Joiner and Splitter in the Guava library verwendet. Wir konvertieren Sammlungen in einen String mitJoiner und teilen einen String in eine Sammlung mitSplitter auf.
2. Konvertieren SieList inString mitJoiner
Beginnen wir mit einem einfachen Beispiel, umList mitJoiner zuString zu verbinden. Im folgenden Beispiel verbinden wirList von Namen zu einemString, indem wir das Komma "," als Trennzeichen verwenden:
@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. Konvertieren SieMap inString mitJoiner
Weiter - sehen wir uns an, wie SieJoiner verwenden, umMap inString umzuwandeln. Im folgenden Beispiel verwenden wirwithKeyValueSeparator(), um den Schlüssel mit seinem Wert zu verbinden:
@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. Verschachtelten Sammlungen beitreten
Nun wollen wir sehen, wie verschachtelte Sammlungen zuStringzusammengefügt werden. Im folgenden Beispiel verbinden wir das Ergebnis der Transformation jedesList in einString:
@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, String>() {
@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. Behandeln Sie Nullwerte, während SieJoiner verwenden
Lassen Sie uns nun verschiedene Möglichkeiten zum Umgang mit Nullwerten bei der Verwendung von Joiner sehen.
Umskip null values beim Beitritt zur Sammlung zu verwenden, verwenden SieskipNulls() wie im folgenden Beispiel:
@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");
}
Wenn Sie keine Nullwerte überspringen undreplace them instead möchten, verwenden SieuseForNull() wie im folgenden Beispiel:
@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");
}
Beachten Sie, dassuseForNull() die ursprüngliche Liste nicht ändert, sondern nur die Ausgabe des Joins beeinflusst.
6. Erstellen SieList ausString mitSplitter
Nun wollen wir sehen, wie man einString in einList aufteilt. Im folgenden Beispiel verwenden wir das Trennzeichen "-", um die EingabeString inList aufzuteilen:
@Test
public void whenCreateListFromString_thenCreated() {
String input = "apple - banana - orange";
List result = Splitter.on("-").trimResults()
.splitToList(input);
assertThat(result, contains("apple", "banana", "orange"));
}
Beachten Sie, dasstrimResults() das führende und nachfolgende Leerzeichen aus den resultierenden Teilzeichenfolgen entfernt.
7. Erstellen SieMap ausString mitSplitter
Weiter - sehen wir uns an, wie Sie mit Splitter eine Karte aus einem String erstellen. Im folgenden Beispiel verwenden wirwithKeyValueSeparator(), um einString in einMap aufzuteilen:
@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. Teilen SieString mit mehreren Trennzeichen
Nun wollen wir sehen, wie Sie einString mit mehreren Trennzeichen teilen. Im folgenden Beispiel verwenden wir beide "." und ",", um unsereString aufzuteilen:
@Test
public void whenSplitStringOnMultipleSeparator_thenSplit() {
String input = "apple.banana,,orange,,.";
List result = Splitter.onPattern("[.,]")
.omitEmptyStrings()
.splitToList(input);
assertThat(result, contains("apple", "banana", "orange"));
}
Beachten Sie, dassomitEmptyStrings() leere Zeichenfolgen ignoriert und sie nicht zu den resultierendenList hinzufügt.
9. Teilen Sie aString bei spezifischer Länge
Weiter - Schauen wir uns an, wie SieString in einer bestimmten Länge aufteilen. Im folgenden Beispiel teilen wir unsereString alle 3 Zeichen auf:
@Test
public void whenSplitStringOnSpecificLength_thenSplit() {
String input = "Hello world";
List result = Splitter.fixedLength(3).splitToList(input);
assertThat(result, contains("Hel", "lo ", "wor", "ld"));
}
10. Begrenzen Sie das Split-Ergebnis
Zum Schluss sehen wir uns an, wie Sie das Split-Ergebnis begrenzen können. Wenn SieSplitter bisstop splitting after specific number of items möchten, verwenden Sielimit() wie im folgenden Beispiel:
@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. Fazit
In diesem Tutorial haben wir gezeigt, wie Sie sowohlJoiner als auchSplitter in Guava verwenden, um verschiedene Transformationen zwischen Sammlungen und Strings durchzuführen.
Die Implementierung all dieser Beispiele und Codefragmentecan be found in my Guava github project - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.