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 objetsA code> avec au moins un objetC 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ésultatcode>, que cela réponde à la "123" -Criteria ou non?