86 votes

Java : Trouver des objets dans les collections

Ce problème se produit encore et encore. J’ai un objet complexe, comme un chat qui possède de nombreuses propriétés, telles que l’âge, nourriture pour chats préférés et ainsi de suite.

Un tas de chats sont stockés dans une Collection de Java, et j’ai besoin de trouver tous les chats qui sont âgés de 3 ans, ou ceux dont la nourriture préférée est Whiskas. Certes, je peux écrire une méthode personnalisée qui trouve ces chats avec une propriété spécifique, mais cela devient encombrant avec de nombreuses propriétés ; y a-t-il certains générique moyen d’y parvenir ?

62voto

Brian Dilley Points 985

Essayez les collections communes API :

Bien sûr, il ne faut pas utiliser une classe anonyme chaque fois, vous pourriez créer des implémentations de la `` interface pour recherches couramment utilisés.

55voto

rcouto Points 11

J’ai utilisé Google Collections (maintenant appelé goyave) pour ce genre de problème. Il existe une classe appelée Iterable qui peut prendre une interface appelée prédicat comme paramètre d’une méthode qui est vraiment utile.

Vérifiez-le ici!

53voto

Adrian Shum Points 10784

Avec expression lambda Java 8, vous pouvez faire quelque chose comme

Conceptuellement, le même que l’approche goyave prédicat, mais il semble beaucoup plus propre avec lambda

Probablement pas une réponse valable pour OP mais vaut la peine de noter les personnes ayant des besoins semblables. :)

45voto

David Z Points 49476

Vous pourriez écrire une méthode qui prend une instance d’une interface qui définit une `` méthode, où cette méthode peut être implémentée avec quelque propriété vérification vous voulez.

Mieux encore, rendre générique :

Bien sûr, comme disent les autres gens, c’est ce que les bases de données relationnelles ont été faites pour...

11voto

flybywire Points 36050

Je suggère d’utiliser Jxpath, il vous permet d’effectuer des requêtes sur les graphiques d’objets comme si TI où xpath comme

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X