java有钳位function吗?

假设我有一个value ,我通常这样做是为了将它“夹”到一个范围,这里的范围是[0..1] 。 也就是说,如果它低于范围起点,将其增加到范围起点,高于范围终点,将其减小到范围终点。

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

是否有内置的function夹紧到一个范围?

是否有内置的function夹紧到一个范围?

没有。

查看了另一个答案中提供的通用钳位方法后,值得注意的是,这对于原始types具有装箱/拆箱的考虑。

 public static <T extends Comparable<T>> T clamp(T val, T min, T max) {...} float clampedValue = clamp(value, 0f, 1f); 

这将使用Float包装类,产生3个盒子操作,每个参数一个,返回types1个unbox操作。

为了避免这种情况,我只需要坚持长时间写它,或者使用非generics函数来获得所需的types:

 public static float clamp(float val, float min, float max) { return Math.max(min, Math.min(max, val)); } 

然后用相同的方法为每个需要的基本types重载。

从.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; } 

警告:与.NET不同,基本types在generics中是不允许的,这意味着它们必须是盒装/非盒装的。 在使用基本types(如intdouble ,此实现将执行三个框操作和一个unbox操作。

注意:因为它是.NET解决scheme的一个端口, 所以我将其制作为社区wiki文章。

从版本21开始, Guava包含Ints.constrainToRange() (和其他原语的等价方法)。 从发行说明 :

添加了constrainToRange([type] value, [type] min, [type] max)方法,该方法将给定值限制在由minmax定义的封闭范围内。 如果它在范围内,则它们自己返回值,如果它在范围之下,则返回min如果在范围之上,则返回max