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.