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 type String .

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

3. Aplatissement de la liste avec forEach

Afin d'aplatir cette collection imbriquée dans une liste de chaînes, nous pouvons utiliser forEach 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. Aplatissement de la liste avec flatMap

Nous pouvons également aplatir la liste imbriquée en utilisant la méthode flatMap de l' API Stream .

Cela nous permet d'aplatir la structure Stream imbriquée et finalement 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éthode forEach ou 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 article sur GitHub.