Aplatissement des collections imbriquées en Java
1. Vue d'ensemble
Dans cet article rapide, nous allons explorer comment aplatir une collection imbriquée en Java.
2. Exemple de collection imbriquée
Supposons que nous ayons une liste de listes de typeString.
List> nestedList = asList(
asList("one:one"),
asList("two:one", "two:two", "two:three"),
asList("three:one", "three:two", "three:three", "three:four"));
3. Aplatir lesList avecforEach
Afin d'aplatir cette collection imbriquée dans une liste de chaînes, nous pouvons utiliserforEach avec une référence de méthode Java 8:
public List flattenListOfListsImperatively(
List> nestedList) {
List ls = new ArrayList<>();
nestedList.forEach(ls::addAll);
return ls;
}
Et ici, vous pouvez voir la méthode en action:
@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. Aplatir lesList avecflatMap
Nous pouvons également aplatir la liste imbriquée en utilisant la méthodeflatMap de l'APIStream.
Cela nous permet d'aplatir la structure imbriquéeStream et éventuellement de collecter tous les éléments dans une collection particulière:
public List flattenListOfListsStream(List> list) {
return list.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
}
Et voici la logique en action:
@Test
public void givenNestedList_thenFlattenFunctionally() {
List ls = flattenListOfListsStream(nestedList);
assertNotNull(ls);
assertTrue(ls.size() == 8);
}
5. Conclusion
Une simple méthodeforEach or flatMap dans Java 8, associée à des références de méthode, peut être utilisée pour aplatir les collections imbriquées.
Vous pouvez trouver le code décrit dans cet articleover on GitHub.