Filtre et collectez des éléments de collection imbriquées en utilisant Java flux 8

crmepham;

J'ai une collection d' Parentobjets et chacun a une collection d' Childéléments, par exemple:

public class Parent {
    private Collection<Child> children;
}

public class Child {
    private String type;
}

Comment puis-je utiliser Java 8 programmation fonctionnelle pour filtrer et rassembler une collection d' Childoù le type est égal à « A »?

J'ai essayé ce qui suit:

Collection<Child> filteredChildren = parents.stream()
                                        .forEach(p ->
                                            filteredChildren.addAll(p.getChildren().stream()
                                                          .filter(c -> c.getType().equals("A"))
                                                          .collect(Collectors.toList()))
                                        );

Mais je reçois l'erreur suivante:

Variable 'filteredChildren' initialiseur 'parents.stream () .foreach (p -> ...' est redondant moins ... (⌘F1) Ce Les points d'inspection les cas dans lesquels une valeur variable est jamais utilisé après sa mission, à savoir: - la variable n'est lu après cession ou - la valeur est toujours remplacée par une autre affectation avant la prochaine variable de lecture ou - la variable initialiseur est redondante (pour l'une des deux raisons ci-dessus)

Comment puis-je filtrer les collections imbriquées par type et collectionne?

Ils étaient les suivants:

Il est faux d'utiliser forEachdans votre code pour le terminal Streamopération, car elle ne produit pas de sortie, de sorte que vous ne pouvez pas l' attribuer à la filteredChildrenvariable.

Utilisez flatMappour obtenir un plat Streamde tous les Childcas (filtrés par type) de toutes les Parentinstances, puis Collect à List:

Collection<Child> filteredChildren = 
    parents.stream()
           .flatMap(p -> p.getChildren()
                          .stream()
                          .filter(c -> c.getType().equals("A")))
           .collect(Collectors.toList());

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=178817&siteId=1
conseillé
Classement