J'essaie de faire une tâche qui se révèle difficile. Comment puis-je atteindre l'objectif de filtrer une liste de liste à Kotlin? Je cherchais ici avec filtre et map mais il était impossible de le faire.
J'ai cette classe de données. P> que je veux faire est d'obtenir une liste de CatégorieModel qui ne possède que la collectionmodel qui correspond à une sous-chaîne avec une collection spécifiqueModel.name. P> C'est le code que j'ai essayé, mais si CollectionModel a deux éléments, je reçois deux éléments, et je ne veux que l'élément qui Contient la sous-chaîne: p> update 1 p> donne cette erreur: p>
P> p>
4 Réponses :
Vous pouvez essayer ceci:
collection.reduce { acc, list -> list.filter { it.name.contains(textToSearch.capitalize()) } }
J'ai essayé mais avoir une erreur dans .reduce. Jetez un coup d'œil à ma question de mise à jour que j'ai jointe une capture d'écran avec l'erreur
Spécifiez simplement les types génériques Collection.Reduce , Liste
Je ne suis pas capable de mettre correctement les types génériques, désolé
Collection VAR privée: Liste
Qu'en est-il de cette logique? collection.filter {it.collections.any {it.name.contains (texttosearch.capitaliser ())}} code>
Cela se sent en quelque sorte hacky, car le code suivant crée de nouveaux objets de l'appelant dans un résulte de la sortie suivante: p> qui apparaît souhaité. p> après avoir clarifié le Conditions requises, la fonction d'extension suivante de la liste quand j'appelle-la comme ça < / p> La sortie semble être la valeur souhaitée: p> ce qui signifie qu'il n'y a que CategorateModel code> à l'aide d'une liste filtrée de CollectionModel code>, mais il semble fonctionner. Il renvoie un Mutablelist amusant principal code> comme ceci p> modifier h1>
catégorieModel code > S GAUCHE qui avait correspondant CollectionModel code> S dans collections code> et seulement ceux qui sont laissés là-bas, tous les autres ont été supprimés. P> P>
Je reçois des éléments de CollectionModel qui ne contient pas le TextTosearch .....
Hmmm vraiment? Ensuite, changez le isnotempty () code> sur isempty () code> et réessayez, s'il vous plaît ...
avec isempty (), je reçois tous les éléments à moins que le bon article
@ S.P. Oui, je m'attendais à ce que ... la logique originale avec isnotempty () code> devrait fonctionner. Sinon, il doit y avoir un problème différent. Veuillez ajouter quelques sorties de données à votre question.
Le modèle d'objet n'est pas exactement de cette manière. Essayez avec ceci: var Collection1 = CollectionModel (1, "xxxxx", "riz") var Collection2 = CollectionModel (1, "XXXXX", "Pâche") Var CollectionListToadd = ArrayListof (Collection1, Collection2) Var CollectionTantearch = CatégorieModel (CollectionListTaAdd, 1, "riz and pâtes")
Le problème devient quand vous avez deux ou plusieurs collectionModel à l'intérieur de la catégorieModel
@ S.P. Voulez-vous réduire l'attribut collections code> dans un CategorateModel code> pour seulement ceux qui correspondent à la condition? Je pensais que vous vouliez que tout CategorateModel code> S qui ont au moins une correspondance CollectionModel CODE>, puis prenez la catégorie complèteModel code> ...
Oui, je souhaite seulement que la catégorieModel dont la collectionModel correspond au TextTeSearch et uniquement la collectionmodel correspondant. Si vous avez plus de collectionModel dans la catégorieModel, les autres doivent être refusés. Me comprenez-vous?
Pensez-vous que c'est possible?
@ S.P. Oui, je comprends et je pense que c'est possible, mais j'aurai besoin d'un peu de temps pour savoir comment ... Passez le temps moyen de déterminer les solutions possibles vous-même ;-)
Oui, j'essaie. Si je reçois la solution, je vous le ferais savoir
@ S.P. J'ai enfin trouvé une solution, mais ce n'est pas vraiment parfait ... Vérifiez-le si vous avez le temps.
Jetez un coup d'œil à la réponse de Tenfour04, je pense que c'est une approche plus propre. Qu'est-ce que tu penses?
@ S.P. Oui, c'est certainement meilleur ... je l'utiliserais et accepterais sa réponse.
Il est propre pour créer de nouveaux Explication: P> dans le CategorateModel code> lorsque vous filtrez. Ce sont de beaux modèles immuables de toute façon. MapNotnull code> signifie que nous créons une nouvelle liste ne contenant que les résultats de la Lambda que ne sont pas nuls. Dans la Lambda, nous créons une catégorieModel pour la nouvelle liste filtrée ou renvoyons null pour la sauter lorsqu'il n'avait pas d'éléments avec les critères souhaités. P> avec code > Déclaration Nous créons une nouvelle liste filtrée desmodèles acceptables et s'il n'est pas vide, nous le transmettons à la nouvelle copie de la catégorie sourceModel. p> p>
Une approche simple utilise un filtre imbriqué
Comment l'avez-vous essayé vous-même? Pouvez-vous nous montrer le code et le (s) message d'erreur survenu?
Obtenez-vous la liste de quelque part et vous voulez le filtrer?
Oui j'ai essayé. J'ai mis à jour la question
Je reçois la liste du dos