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

Java Discussion :

2 éléments de 2 Set différents liés?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut 2 éléments de 2 Set différents liés?
    Bonjour,

    J'explique : j'ai une liste de produits dans un Set , et un utilisateur peut ajouter un produit à son panier , panier qui est en faite aussi un Set de produit.

    Ajout d'un article au panier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // a product has been choosed , we send the shopping cart page
     
    		for(Product prod:products)
    		{
    			if(prod.getId()==selectedProd)//we find the selected Prod
    			{
    				  cartProducts.add(prod);
    			}
    		}
    où cartProducts est un Set et prod est un Produit de mon Set de produits

    Tout fonctionne bien mais maintenant je désire testé si l'élément s'y trouve déjà où non. Si il s'y trouve , j'incrémente la quantité.

    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
     
    // a product has been choosed , we send the shopping cart page
     
    		for(Product prod:products)
    		{
    			if(prod.getId()==selectedProd)//we find the selected Prod
    			{
    				if(cartProducts.contains(prod))
    				//if we already added it in our cartShop
    				{
    					for(Product myProd:cartProducts)
    					{//We get it and increment the qty
    						if(myProd.getId()==prod.getId())
    						{
    							myProd.setQuantity(myProd.getQuantity()+1);
    							System.out.println(myProd.getQuantity() + " " + prod.getQuantity());
    						}
    					}
    				}
    				else
    				  cartProducts.add(prod);
    			}
    		}
    Il se trouve qu'après ceci , aussi bien myProd.getQuantity() que prod.getQuantity() retourne la même valeur..

    Comment puis-je faire pour change l'état d'un sans modifier l'autre?

    Merci d'avance à vous.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Le problème vient du fait que tes deux variables prod et myProd sont en fait des références qui pointent vers un unique objet.

    Une solution consiste à cloner ton produit (méthode clone() que tu devras certainement implémenter).

    Mais au vu de ton problème, les Set sont assez inadaptés. Imagine que ta base contienne plusieurs millions de produits... tout reparcourir à chaque fois est très couteux.

    Voici comment j'aurais de manière simpliste représenté les choses:

    Une "Map<Integer,Produit>" produits qui lie l'identifiant du produit à sa quantité.
    Une "Map<Integer,Integer>" panier, qui lie l'identifiant d'un produit à la quantité achetée.

    Et la méthode d'ajout qui va avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void ajouter(Produit prod) {
       if(panier.containsKey(prod.getKey())) {
          // quantite + 1
          Integer nouvelleQuantite = Integer.valueOf(panier.get(prod.getKey()).intValue() + 1);
          panier.put(prod.getKey(),  nouvelleQuantite);
       } else {
          panier.put(prod.getKey(), Integer.valueOf(1));
       }
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Merci pour cette réponse plus que claire et précise !

    Je vais pencher sur ta version..
    J'avais pensé à utiliser des Maps plutôt que des Sets mais le choix de la collection appropriée reste un vrai casse tête pour moi malgré ce que j'ai pu déjà lire..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparer 2 à 2 les éléments d'un set
    Par 5kippy dans le forum SL & STL
    Réponses: 4
    Dernier message: 10/10/2007, 21h19
  2. Récupérer le 1° élément d'un SET OF
    Par Tchaill39 dans le forum Delphi
    Réponses: 3
    Dernier message: 05/04/2007, 16h14
  3. Test de l'existence d'un élément dans un set
    Par Rodrigue dans le forum C++
    Réponses: 16
    Dernier message: 28/10/2006, 01h36
  4. [Débutant] Acceder à l'élément d'un set
    Par pinggu dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 01/06/2006, 01h54
  5. [SET]Recherche d'éléments communs à 2 sets
    Par CappCorp dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 03/01/2005, 17h03

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