在groovy中有没有任何方法可以找到附近的数字?例如:
def list = [22,33,37,56]
def number = 25
//any method to find $number is near to 22 rather than 33.
是否有任何方法可用于上述目的,或者我必须为此目的构建自己的方法或闭包。
提前致谢。
答案 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)
如果它是有序的List
,Collections.binarySearch()
几乎完成相同的工作。 Arrays.binarySearch()
也是如此。