Verschachtelte Sammlungen in Java reduzieren

Reduzieren verschachtelter Sammlungen in Java

1. Überblick

In diesem kurzen Artikel erfahren Sie, wie Sie eine verschachtelte Sammlung in Java reduzieren.

2. Beispiel einer verschachtelten Sammlung

Angenommen, wir haben eine Liste von Listen vom TypString.

List> nestedList = asList(
  asList("one:one"),
  asList("two:one", "two:two", "two:three"),
  asList("three:one", "three:two", "three:three", "three:four"));

3. Abflachen derList mitforEach

Um diese verschachtelte Auflistung in eine Liste von Zeichenfolgen zu reduzieren, können wirforEach zusammen mit einer Java 8-Methodenreferenz verwenden:

public  List flattenListOfListsImperatively(
    List> nestedList) {
    List ls = new ArrayList<>();
    nestedList.forEach(ls::addAll);
    return ls;
}

Und hier sehen Sie die Methode in Aktion:

@Test
public void givenNestedList_thenFlattenImperatively() {
    List ls = flattenListOfListsImperatively(nestedList);

    assertNotNull(ls);
    assertTrue(ls.size() == 8);
    assertThat(ls, IsIterableContainingInOrder.contains(
      "one:one",
      "two:one", "two:two", "two:three", "three:one",
      "three:two", "three:three", "three:four"));
}

4. Abflachen derList mitflatMap

Wir können die verschachtelte Liste auch reduzieren, indem wir die MethodeflatMapaus der APIStreamverwenden.

Auf diese Weise können wir die Struktur des verschachteltenStreamreduzieren und schließlich alle Elemente für eine bestimmte Sammlung sammeln:

public  List flattenListOfListsStream(List> list) {
    return list.stream()
      .flatMap(Collection::stream)
      .collect(Collectors.toList());
}

Und hier ist die Logik in Aktion:

@Test
public void givenNestedList_thenFlattenFunctionally() {
    List ls = flattenListOfListsStream(nestedList);

    assertNotNull(ls);
    assertTrue(ls.size() == 8);
}

5. Fazit

Eine einfacheforEach or flatMap-Methode in Java 8 kann in Kombination mit Methodenreferenzen zum Reduzieren verschachtelter Sammlungen verwendet werden.

Sie finden den in diesem Artikel beschriebenen Codeover on GitHub.