methodes - signature d'une méthode java




Java a-t-il une fonction de pince? (4)

Supposons que j’ai une value , c’est ce que je fais habituellement pour la "pincer" dans une plage, ici la plage [0..1] . C’est-à-dire que si elle se situe en-dessous du début de la plage, augmentez-la au début de la plage, au-dessus de la fin de la plage, réduisez-la à la fin de la plage.

clampedValue = Math.max(0, Math.min(1, value));

Existe-t-il une fonction intégrée pour le serrage dans une plage?


Existe-t-il une fonction intégrée pour le serrage dans une plage?

Non.


À partir de la version 21, Guava inclut Ints.constrainToRange() (et des méthodes équivalentes pour les autres primitives). À partir des notes de publication :

ajouté des méthodes constrainToRange([type] value, [type] min, [type] max) qui contraignent la valeur donnée à la plage fermée définie par les valeurs min et max Ils renvoient la valeur elle-même si elle se trouve dans la plage, la valeur min si elle est inférieure à la plage et la valeur max si elle est supérieure à la plage.


Porté à partir d' une réponse .NET :

public static <T extends Comparable<T>> T clamp(T val, T min, T max) {
    if (val.compareTo(min) < 0) return min;
    else if (val.compareTo(max) > 0) return max;
    else return val;
}

Attention: Contrairement à .NET, les types primitifs ne sont pas autorisés dans les génériques, ce qui signifie qu'ils doivent être encadrés / non emballés. Lorsque vous travaillez avec des types primitifs, tels que int et double , cette implémentation effectuera trois opérations de boîte et une opération unbox.

Note: comme c'est un portage de la réponse .NET , j'en ai fait un post wiki de communauté.


Une autre solution moins jolie, mais possible, consiste à utiliser l'opérateur ternaire, qui est un raccourci pour la déclaration if-then-else .

Quelques exemples:

// value must be between MIN_VALUE and MAX_VALUE
value = value > MAX_VALUE ? MAX_VALUE : value < MIN_VALUE ? MIN_VALUE : value;

// value must be between 0 and 10
value = value > 10 ? 10 : value < 0 ? 0 : value;




clamp