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 :

Requête sur un ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut Requête sur un ArrayList
    Je suis face à un dilemme et je soumet cela à votre appréciation.

    Comment faire une requête sur un ArrayList (A) afin d'obtenir dans un autre ArrayList (B) les données de l'ArrayList (A) qui respectent un critère ?

    Je m'explique.
    J'ai dans l'ArrayList (A) la liste de tous les employés d'une boîte et je voudrais avoir dans l'ArrayList (B) à partir de l'ArrayList(A) les employés du département (x) de cette boîte.

    Please help me

  2. #2
    Membre éclairé
    Inscrit en
    Février 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 38
    Par défaut
    Hello,

    soit tu utilises l'api commons-collections d'apache et t'utilise la méthode filter

    Soit tu le code toi même.
    En faisant un peu générique t'arrives à ça :

    une interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public interface IFilter<T> {
    	public boolean accept(T toTest);
    }
    Une classe utilitaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class ObjectCollectionUtils<T> {
    	public List<T> filter(List<T> toFilter, IFilter<T> filter) {
    		List<T> result = new ArrayList<T>();
    		for (T toTest : result) {
    			if(filter.accept(toTest))
    				result.add(toTest);
    		}
    		return result;
    	}
    }
    et ton main (ici un test sur des String a toi d'adapter avec ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    		IFilter<String> myFilter = new IFilter<String>() {
    			@Override
    			public boolean accept(String toTest) {
    				//test à la con 
    				if(toTest.length()<3)
    					return true;
    				return false;
    			}
    		};
    		List<String> toFilter = new ArrayList<String>();
    		toFilter.add("ab");
    		toFilter.add("abqdsfd");
    		ObjectCollectionUtils<String> objectCollectionUtils = new ObjectCollectionUtils<String>();
    		List<String> filteredList = objectCollectionUtils.filter(toFilter, myFilter);

  3. #3
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut
    Merci super_toinou,
    Je suis entrain de chercher à comprendre le code que tu viens de fournir. Voici l'ArrayList à partir de laquelle je dois effectuer le filtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public static ArrayList<employe> getListClientAS400(){
    	connexion = new BDConnectAS400();
    	String requete = "SELECT * FROM EMPLOYES ORDER BY CIDEMP";
    	Statement state;
    	ResultSet res;
    	ArrayList<employe> list = new ArrayList<employe>();
     
    	try{
    		state = connexion.getInstance().createStatement();
    		res = state.executeQuery(requete);
    		while(res.next()){
    			employe emp = new employe();
    			emp.setCDEMP(res.getString(2));//Code employé 
    			emp.setNOM(res.getString(3));//Nom
    			emp.setPRENOMS(res.getString(4));//Prénoms
    			emp.setADR1PN(res.getString(5));//Adresse 1ère partie
    			emp.setADR2PN(res.getString(6));//Adresse 2ème partie
    			emp.setVILLPN(res.getString(7));//Ville
    			emp.setNTELPN(res.getString(8));//N° de téléphone
    			emp.setNTEFPN(res.getString(9));//N° de tel Fax
    			emp.setDEPT(res.getString(10));//Département
    			list.add(emp);
    		}
    		res.close();
    		return list;
    		}catch(SQLException e){}
    		return null;
    	}
    Je voudrais pouvoir faire la même chose mais selon le département.

  4. #4
    Membre éclairé
    Inscrit en
    Février 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 38
    Par défaut
    Oulà c'est pas très joli tout ça
    Mets au moins la première lettre de tes classes en majuscule (norme Java)

    Sinon pour ton pb :
    Tu appelles ta méthode qui te file tous les employés et tu filtres
    (j te donne la trame à suivre à l'arrache)

    Crée une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class DeptEmployeFilter implements IFilter<Employe>{
     
    private String validDept;
    public DeptEmployeFilter (String validDept){
    this.validDept = validDept;
    }
     
    public boolean accept(Employe toTest) {
    return validDept.equals(toTesy.getDept());
    }
    }
    Ensuite dans ton code qui appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    List<Employe> allEmployees = MonDAO.getListClientAS400()
    IFilter deptFilter = new DeptEmployeFilter ("serviceCompta");
    ObjectCollectionUtils<Employe objectCollectionUtils = new ObjectCollectionUtils<Employe>();
     
    List<String> filteredList = objectCollectionUtils.filter(allEmployees , deptFilter );
    C'est plus ou moins l'idée, à toi de t'adapter

    +++

  5. #5
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut
    Encore une dernière question
    Je dois afficher les données obtenue dans un JTable. Voici comment je procédais avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void initClient() {
    	Thread t = new Thread(){
     
    	@Override
    	public void run() {
              lister = new ArrayList<ClientAS400>();
    	  ArrayList<employe> list  = DAOClientAS400.getListClientAS400();
    	  lister = list;
    	  table.setModel(new ClientAS400TableModel(lister));
    	   }};
    	   t.start();
    	 }
    Maintenant qu'il ya un filtrage pourrais-tu réviser ce code s'il te plaît ?

  6. #6
    Membre éclairé
    Inscrit en
    Février 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 38
    Par défaut
    J vais pas tout faire à ta place non plus.
    T as juste à filtrer ta liste avant de le passer au model

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/07/2011, 11h29
  2. Requête sur un MemData
    Par claude dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/12/2004, 10h11
  3. Requête sur date
    Par guenfood dans le forum Access
    Réponses: 11
    Dernier message: 08/12/2004, 16h11
  4. Requête sur un serveur lié
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/08/2003, 11h35
  5. requête sur l'année d'une date
    Par jo77 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/07/2003, 09h28

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