3 votes

Obtenir une liste agrégée de propriétés à partir d'une liste d'objets (Java 8)

J'ai une classe Division qui a une liste de Section comme propriété comme ci-dessous

class Division {
    private List<Section> sections;
    // respective getters and setters
}

Disons que j'ai une liste de divisions, et que je veux obtenir une liste agrégée de sections, je sais que cela peut être fait en utilisant l'approche régulière comme ci-dessous.

List<Division> divisions = getDivisions();
List<Section> sections = new ArrayList<>();
for (Division division : divisions) {

    sections.addAll(division.getSections());
}

Je veux savoir s'il existe un moyen de faire la même chose en utilisant les flux Java-8.

4voto

Ravindra Ranwala Points 5765

Vous pouvez le faire en utilisant le flatMap opérateur. Voici à quoi ça ressemble.

List<Section> sections = divisions.stream()
    .flatMap(d -> d.getSections().stream())
    .collect(Collectors.toList());

1voto

George Z. Points 6025

Vous pouvez soit mettre en correspondance les valeurs :

divisions.stream().map(Division::getSections).forEach(sections::addAll);

ou simplement :

divisions.forEach(d -> sections.addAll(d.getSections()));

1voto

Code_Mode Points 2168

Vous pouvez diffuser sur divisions et ajoutez les éléments aux sections comme ci-dessous,

divisions.stream().map(ele->ele.getSections()).forEach(sections::addAll);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X