Mise à plat des collections imbriquées en Java

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.