web-dev-qa-db-fra.com

Supérieur à et inférieur à un énoncé

Je me demandais, avez-vous une bonne façon de faire cela?

if(orderBean.getFiles().size() > 0  && orderBean.getFiles().size() < 5)

sans déclarer une variable qui n'est pas nécessaire ailleurs?

int filesCount = orderBean.getFiles().size();
if(filesCount > 0  && filesCount < 5) {

Je veux dire, dans la boucle nous "déclarons des conditions" pour l'itération réelle, on peut déclarer une variable et ensuite spécifier les conditions. Ici, on ne peut pas le faire, et on ne peut rien faire comme 

if(5 > orderBean.getFiles().size() > 0)
16
lisak

Méthode d'utilité simple:

public static boolean isBetween(int value, int min, int max)
{
  return((value > min) && (value < max));
}
23
jtahlborn

Plusieurs bibliothèques tierces ont des classes encapsulant le concept de range, telles que Apache commons-lang's Range (et ses sous-classes).

En utilisant des classes telles que celle-ci, vous pourriez exprimer votre contrainte de la manière suivante:

if (new IntRange(0, 5).contains(orderBean.getFiles().size())
// (though actually Apache's Range is INclusive, so it'd be new Range(1, 4) - meh

avec le bonus supplémentaire que l'objet range peut être défini comme une valeur constante ailleurs dans la classe.

Cependant, sans extraire d'autres bibliothèques et utiliser leurs classes, la syntaxe forte de Java signifie que vous ne pouvez pas manipuler le langage lui-même pour fournir cette fonctionnalité correctement. Et (à mon avis), accéder à une bibliothèque tierce uniquement pour cette petite quantité de sucre syntaxique n'en vaut pas la peine.

10
Andrzej Doyle

Si getFiles () retourne un Java.util.Collection,! GetFiles (). IsEmpty () && size <5 peut être OK.

D'autre part, à moins que vous n'encapsuliez le conteneur qui fournit une méthode telle que boolean sizeBetween(int min, int max).

3

C'est une façon laide de faire cela. Je voudrais juste utiliser une variable locale.

EDIT: Si taille ()> 0 également.

if (orderBean.getFiles().size() + Integer.MIN_VALUE-1 < Integer.MIN_VALUE + 5-1)
2
Peter Lawrey

Java n'est pas Python.

tu ne peux rien faire de pareil

if(0 < i < 5) or if(i in range(0,6))

vous avez mentionné le moyen le plus simple:

int i = getFilesSize();
if(0 < i && i < 5){
    //operations

}

de

   if(0 < i){
       if(i < 5){
          //operations
       }
     }
2
user467871

Si cela vous dérange vraiment, pourquoi ne pas écrire votre propre méthode isBetween(orderBean.getFiles().size(),0,5)?

Une autre option consiste à utiliser isEmpty car c'est un peu plus clair:

if(!orderBean.getFiles().isEmpty() && orderBean.getFiles().size() < 5)
1
dogbane

S'il vous plaît écrivez simplement une méthode statique quelque part et écrivez:

if( isSizeBetween(orderBean.getFiles(), 0, 5) ){
    // do your stuff 
}
1
Gareth Davis

De nos jours, vous pouvez utiliser lodash :

var x = 1;
var y = 5;
var z = 3;
_.inRange(z,x,y);
//results true
0
Z. Khullah