0
votes

Comment filtrer la liste des objets de la liste sans changer la liste d'origine

La structure de code simplifiée ressemble à ceci:

 [
   {
    "bList": [
        {
            "cList": [
                {
                    "name": "123"
                }
            ]
        }
    ]
}


5 commentaires

Voulez-vous dire que tous c.name doivent être "123" ? Ou voulez-vous dire des objets A avec au moins un objet C avec "123" 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 B


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);});


Il semble qu'un nouveau A (nouveau araylist <> ()) est toujours ajouté au résultat , que cela réponde à la "123" -Criteria ou non?


3 Réponses :


0
votes

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());


0 commentaires

0
votes

La méthode flux :: Flatmap aplatit la structure qui signifie que la hiérarchie est détruite.

Voici un moyen d'aller: xxx


2 commentaires

@ 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.