Groovy中附近数字的方法

Ant*_*t's 1 groovy

在groovy有没有任何方法可以找到附近的数字?例如 :

def list = [22,33,37,56]
def number = 25
//any method to find $number is near to 22 rather than 33.
Run Code Online (Sandbox Code Playgroud)

是否有任何方法用于上述目的,或者我必须为此目的构建我自己的方法或闭包.

提前致谢.

Chr*_*orf 6

以下Groovy集合方法的组合将为您提供列表中最接近的数字:

list.groupBy { (it - number).abs() }.min { it.key }.value.first()
Run Code Online (Sandbox Code Playgroud)

list.groupBy { (it - number).abs() }将改变列表转换为地图,其中每个映射条目包括作为键的数量和原始列表条目作为值的距离的:

[3:[22], 8:[33], 12:[37], 31:[56]]
Run Code Online (Sandbox Code Playgroud)

这些值现在每个都是一个列表,理论上原始列表可以包含两个距离相等的条目.然后在地图上选择具有最小键的条目,获取其值并返回值列表的第一个条目.

编辑:

这是一个更简单的版本,它根据距离对原始列表进行排序,并返回排序列表的第一个值:

list.sort { (it - number).abs() }.first()
Run Code Online (Sandbox Code Playgroud)