Groovy中附近数字的方法

时间:2011-06-09 06:07:28

标签: groovy

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

def list = [22,33,37,56]
def number = 25
//any method to find $number is near to 22 rather than 33.

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

提前致谢。

2 个答案:

答案 0 :(得分:6)

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

list.groupBy { (it - number).abs() }.min { it.key }.value.first()

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

[3:[22], 8:[33], 12:[37], 31:[56]]

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

修改

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

list.sort { (it - number).abs() }.first()

答案 1 :(得分:1)

如果它是有序的ListCollections.binarySearch()几乎完成相同的工作。 Arrays.binarySearch()也是如此。