La structure de code simplifiée ressemble à ceci:
[ { "bList": [ { "cList": [ { "name": "123" } ] } ] }
3 Réponses :
Si vous voulez avoir le premier élément, puis filtrer par la première collection, puis en utilisant n'importe quelle autre pour valider si la collection intérieure a quelque chose dont vous avez besoin.
List<A> orginalList; orginalList.stream() .filter(a -> a.getBlist().stream() .anyMatch(b -> b.getClist().stream() .anyMatch(c -> "123".equals(c.getName())) ) .collect(toList());
La méthode Voici un moyen d'aller: p> flux :: Flatmap code> aplatit la structure qui signifie que la hiérarchie est détruite.
@ Jevers: Habituellement oui. Pour les réponses, les plus faciles que j'écris de la tête et sinon je l'exécute par moi-même - je n'en ai pas besoin de la solution temporaire pour des raisons de réponses.
@Nikolas Ce filtre Orignallist, non exclusif.
cela préserve tout le chemin em> collection
Les fonctions sont définies dans java.util.stream.collectors code> p> p>
Cette méthode renvoie: Carte
Voulez-vous dire que tous
c.name code> doivent être
"123" code>? Ou voulez-vous dire des objets
A code> avec au moins un objet
C code> avec
"123" code> comme nom?
@ernest_k je veux juste filtrer le clist, pas originaliste. Je veux obtenir un clist ne contenant que c.name = "123". Si le clist a deux objets - avec le nom "123" et "555", je souhaite obtenir une liste d'objets A, contenant une liste d'objets B qui ont uniquement le clist avec c avec le nom "123".
Vous devez probablement créer des constructeurs de copies pour vos objets et filtrer la liste dans vos nouveaux objets code> B code>
Vous pouvez faire ceci:
list résultat = nouveau arrayliste <> (); ORGINALIST.Foreach (A -> {A A1 = Nouveau A (Nouveau ArrayList <> ()); A.Getbliste (). foreach (B -> {b b1 = nouveau B (nouveau arraylist <> ()); b. getclist (). Stream (). Filtre (C-> C.GetName (). Equals ("123")) ajouter (B1);}); résultat.Ajouter (A1);}); code>
Il semble qu'un
nouveau A (nouveau araylist <> ()) code> est toujours ajouté au résultat
code>, que cela réponde à la "123" -Criteria ou non?