Guava - Sammeln und spalten Sie Sammlungen

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.