Bonjour!
Y aurait-il une méthode plus élégante d'effectuer le test suivant ?Merci d'avance!Code:if(codeSousProduit.equals("05")||codeSousProduit.equals("27")||codeSousProduit.equals("28"))
Version imprimable
Bonjour!
Y aurait-il une méthode plus élégante d'effectuer le test suivant ?Merci d'avance!Code:if(codeSousProduit.equals("05")||codeSousProduit.equals("27")||codeSousProduit.equals("28"))
Ben malheuresement Non ! ça se saurait si ça existait.
Si tu as beaucoup de valeurs à tester, tu peux mettre tes String dans un set. Par exemple :
Code:
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 }
Autre possibilité :
Au delà de l'élégance, l'intérêt de cette solution, ainsi que celle d'AlexRNL,Code:
1
2
3
4
5
6
7 String valeursOk = "[05][27][28]"; String codeSousProduit = "27"; if (valeursOk.contains("[" + codeSousProduit + "]")){ System.out.println("gagné"); }
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.
Si ton code est sur deux caractère tu peux faire ça
et si développe pour le plaisir un truc du genreCode:
1
2
3 int x = Integer.parseInt(codeSousProduit); if ((x-5)*(x-27)*(x-28)==0)
Code:
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.
C'est vendredi aprem! On peut se permettre un peu de relâchement.
Je peux t'assurer que le, j'aurais jamais essayé de le simplifier!Code:if(codeSousProduit.equals("05")||codeSousProduit.equals("27")||codeSousProduit.equals("28"))
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
:mouarf2:Citation:
on m'a garanti que la liste de ces valeurs ne changerait pas de si tôt
Allez, c'est samedi matin.
Autre solution
Ca a au moins l'avantage d'être court et facile à lire, à défaut d'être performant.Code:if (Arrays.asList(new String[]{"05","27","28"}).contains(lavaleur))
Allez, encore une, un peu plus élégante (java 7 requis) et performante
Code:
1
2
3
4
5
6
7
8
9 switch (codeSousProduit) { case "05": case "27": case "28": // ton code break: default: // ton else :) }
Sympa pour la version java 7,
C'est vrai que le switch était limité avant
ça sera plus facile de vérifier la version de la JVMCitation:
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.
que d'être sûr que le client ne changera pas sa codification d'articles !