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

avec Java Discussion :

Egalité de contenu d'un String parmi plusieurs valeurs


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Points : 39
    Points
    39
    Par défaut Egalité de contenu d'un String parmi plusieurs valeurs
    Bonjour!

    Y aurait-il une méthode plus élégante d'effectuer le test suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(codeSousProduit.equals("05")||codeSousProduit.equals("27")||codeSousProduit.equals("28"))
    Merci d'avance!

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 288
    Points : 261
    Points
    261
    Par défaut
    Ben malheuresement Non ! ça se saurait si ça existait.
    Merci de lire les règles du forum et surtout celle là Message clair et précis.
    Evitons les ctrl c ctrl v => Ne sortons pas les codes de leur contexte sinon ça ne marche pas.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par pracede2005 Voir le message
    Ben malheuresement Non ! ça se saurait si ça existait.
    Dingue! Ok merci pracede!

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Points : 162
    Points
    162
    Par défaut
    Si tu as beaucoup de valeurs à tester, tu peux mettre tes String dans un set. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set<String> set = new HashSet<>();
    set.add("05");
    set.add("28");
    set.add("27");
     
    if (set.contains(codeSousProduit)) {
    	// traitement
    }

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Autre possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            String valeursOk = "[05][27][28]";
            String codeSousProduit = "27";
     
            if (valeursOk.contains("[" + codeSousProduit + "]")){
                System.out.println("gagné");
            }
    Au delà de l'élégance, l'intérêt de cette solution, ainsi que celle d'AlexRNL,
    c'est de pouvoir construire dynamiquement ta condition.
    La liste "05","27","28" va certainement évoluer et si tu restes sur le code présenté, il te faudra reprendre ton application.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    Si ton code est sur deux caractère tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int x = Integer.parseInt(codeSousProduit);
    if ((x-5)*(x-27)*(x-28)==0)
    et si développe pour le plaisir un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int x = Integer.parseInt(codeSousProduit);
    if (x*x*x-70*x*x+1031*x==-3780)
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par supergeoffrey Voir le message
    Si ton code est sur deux caractère tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int x = Integer.parseInt(codeSousProduit);
    if ((x-5)*(x-27)*(x-28)==0)
    et si développe pour le plaisir un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int x = Integer.parseInt(codeSousProduit);
    if (x*x*x-70*x*x+1031*x==-3780)
    Joli bricolage très geek, mais on a parlé d'élégance, ce qui en général est plutôt question de maintenabilité et de faire les choses de sorte qu'elles soient immédiatement évidentes.

    Certes c'est pas des maths très compliqués, mais ils ne se justifient pas .
    C'est certes très très efficace. Mais une table de hachage l'est suffisamment, sans dépendre du contenu des String, et pour être honnête String.contains() est suffisant aussi.
    Et, plus important, if(x == 5 || x == 27 || x == 28) est encore plus efficace, et est essentiellement la même chose en plus clair.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    C'est vendredi aprem! On peut se permettre un peu de relâchement.
    Je peux t'assurer que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(codeSousProduit.equals("05")||codeSousProduit.equals("27")||codeSousProduit.equals("28"))
    , j'aurais jamais essayé de le simplifier!
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  9. #9
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Citation Envoyé par supergeoffrey Voir le message
    C'est vendredi aprem! On peut se permettre un peu de relâchement.
    Je peux t'assurer que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(codeSousProduit.equals("05")||codeSousProduit.equals("27")||codeSousProduit.equals("28"))
    , j'aurais jamais essayé de le simplifier!
    ben, là, j'aurais quand même évité.
    Je parie des dollars contre des gâteaux secs(*) que ce code a été écrit dans la plus grande urgence sous la menace d'un revolver sur la tempe.
    A l'évidence il s'agit d'une codification présente dans la table produits d'un programme de gestion.
    Quand dans un an ou deux, avec le nouveau DAF (**), on changera la codification , ça ne marchera plus et on cherchera en vain où on peut paramétrer le bouzingue avec la nouvelle codification !

    (*) citation empruntée à Lucky Luke
    (**) directeur administratif et financier -> dès qu'un nouveau arrive, il veut changer quelque chose dans le SI
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Points : 39
    Points
    39
    Par défaut
    Merci tout le monde!

    Citation Envoyé par Népomucène Voir le message
    Autre possibilité :

    La liste "05","27","28" va certainement évoluer et si tu restes sur le code présenté, il te faudra reprendre ton application.
    Je suis bien conscient de ce problème, hélas c'est une modif ultra urgente et on m'a garanti que la liste de ces valeurs ne changerait pas de si tôt, comme d'habitude

    **edit** ouaip, bien vu Népomucène

  11. #11
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    on m'a garanti que la liste de ces valeurs ne changerait pas de si tôt
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Allez, c'est samedi matin.

    Autre solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Arrays.asList(new String[]{"05","27","28"}).contains(lavaleur))
    Ca a au moins l'avantage d'être court et facile à lire, à défaut d'être performant.

  13. #13
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Allez, c'est samedi matin.

    Autre solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Arrays.asList(new String[]{"05","27","28"}).contains(lavaleur))
    Ca a au moins l'avantage d'être court et facile à lire, à défaut d'être performant.
    Tout dépend si on préfère la perf à la maintenance.
    Mais bon il faut différencier "long a lire" et complexité à comprendre.

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Allez, encore une, un peu plus élégante (java 7 requis) et performante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    switch (codeSousProduit) {
       case "05":
       case "27":
       case "28":
          // ton code
          break:
       default:
          // ton else :)
    }

  15. #15
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    Sympa pour la version java 7,
    C'est vrai que le switch était limité avant
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  16. #16
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Allez, encore une, un peu plus élégante (java 7 requis) et performante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    switch (codeSousProduit) {
       case "05":
       case "27":
       case "28":
          // ton code
          break:
       default:
          // ton else :)
    }
    Vu que les précédente version de java ne supporte pas, a utiliser avec beaucoup de prudence suivant ou le code doit etre execute.

  17. #17
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Vu que les précédente version de java ne supporte pas, a utiliser avec beaucoup de prudence suivant ou le code doit etre execute.
    ça sera plus facile de vérifier la version de la JVM
    que d'être sûr que le client ne changera pas sa codification d'articles !
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  18. #18
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 288
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par deathness Voir le message
    Vu que les précédente version de java ne supporte pas, a utiliser avec beaucoup de prudence suivant ou le code doit etre execute.
    Cool je ne connaissais pas !
    Merci de lire les règles du forum et surtout celle là Message clair et précis.
    Evitons les ctrl c ctrl v => Ne sortons pas les codes de leur contexte sinon ça ne marche pas.

  19. #19
    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
    Citation Envoyé par tchize_ Voir le message
    Autre solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Arrays.asList(new String[]{"05","27","28"}).contains(lavaleur))
    Ca a au moins l'avantage d'être court et facile à lire, à défaut d'être performant.
    A noter que depuis Java 5.0 on peut l'écrire d'une manière bien plus lisible grace à l'ellipse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Arrays.asList("05","27","28").contains(lavaleur))

    [edit] Et si on veut de la performance, il suffit de passer par un Set...

    a++

Discussions similaires

  1. Sélection d'enregistrement parmis plusieurs identiques
    Par monnoliv dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 24/09/2005, 15h32
  2. Réponses: 2
    Dernier message: 24/08/2005, 10h59
  3. sélection d'un max parmi plusieurs champs
    Par invitésuprise dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/08/2005, 13h49
  4. [STRING]Contenu d'un String <> vers &lt; et &g
    Par TreizeSegments dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 03/08/2004, 08h37
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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