IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Collections]Implémenter une recherche multi-critère performante


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Points : 19
    Points
    19
    Par défaut [Collections]Implémenter une recherche multi-critère performante
    Bonjour,

    J'ai une collection de d'instance classes par ex une collection de dogs que je dois stocker dans un conteneur, et je voudrais pouvoir ensuite rechercher sur les attributs (searchDogByDogName, searchDogByDogColor, searchDogByOwnerName).

    public class dog {
    private String name;
    private String Color;
    private String OwnerName;
    }

    Pour faire ça, je pense à la strategie suivante, est-ce que qqu'un peut me dire ce qu'il en pense ?

    Je pense developper une classe DogContainer, dans laquelle je vais gerer 3 multimap (name, dog), (Color, dog), (OwnerName, dog) et ensuite chaque methode de search ira rechercher dans la bonne map, suivant le critere.

    Je pense que faire comme ça devrait marcher, mais j'ai plein d'autres classes que je dois aussi stocker dans un conteneur et faire de la recherche multi-critere. QQu'un aurait une idee d'implementation generique ?

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: collections : recherche performante multi-critere.
    Salut,

    Citation Envoyé par ppaul127
    Pour faire ça, je pense à la strategie suivante, est-ce que qqu'un peut me dire ce qu'il en pense ?
    Ca pourrait faire l'affaire si tu as peu de critère... Sinon cela devient vite complexe à gérer...

    De plus ton objet conteneur est très lié avec son contenu puisque dès ue tu modifies ton objet Dog tu te retrouvera obligé de modifier ton DogContainer...

    Si tu as vraiment beaucoups d'éléments ce sera peut-être un peu plus performant (quoique je n'en suis pas sur).

    Citation Envoyé par ppaul127
    Je pense que faire comme ça devrait marcher, mais j'ai plein d'autres classes que je dois aussi stocker dans un conteneur et faire de la recherche multi-critere. QQu'un aurait une idee d'implementation generique ?
    Tu peux utiliser un principe proche des Filtres de recherche de fichier de la classe File, par exemple avec un interface qui définit la méthode du filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface SearchFilter {
    	public boolean accept(Object object);
    }
    La méthode accept() renvoit true si l'objet correspond au critère...

    Ensuite il suffit d'utiliser une méthode statique qui parcourt toutes la collection et qui utilise ce filtre pour créer une nouvelle collection (le résultat) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static Collection search (Collection collection, SearchFilter filter) {
     
    	Collection result = new ArrayList();
     
    	Iterator iterator = collection.iterator();
    	while (iterator.hasNext()) {
    		Object o = iterator.next();
    		if (filter.accept(o)) {
    			result.add(o);
    		}
    	}
     
    	return result;
    }
    Il te suffit de coder ensuite les trois SearchFilter afin de gérer les divers types de recherche...

    L'avantage c'est que tu peux utiliser un collection simple, avec n'importe quel type d'objet. Il te suffit juste d'implémenter les filtres de recherche selon tes besoins...

    a++

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    merci pour l'idée !

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/01/2010, 09h11
  2. Effectuer une recherche multi-critères
    Par Freud44 dans le forum C++Builder
    Réponses: 1
    Dernier message: 17/12/2008, 08h41
  3. Traiter le résultat d'une recherche multi-critères
    Par draxweb dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/03/2007, 19h00
  4. Trier les réponses d'une recherche multi-critères
    Par bétécé dans le forum Access
    Réponses: 6
    Dernier message: 25/01/2007, 09h56
  5. exporter le résultat d'une recherche multi-critère ?
    Par Tetsuotil dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 18/07/2006, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo