我正在尝试通过以下代码从排序后的地图中获取前K个元素:
//return top rank k elements
public static LinkedHashMap<String,Double> getTopRank(int i){
//store top k elements
LinkedHashMap<String, Double> result=new LinkedHashMap<>();
int count=0;
//use the static rankMap in the class
rankMap.each {key,value->
result.put(key, value);
count++;
if(count>=i){
println "Time to return"
return result;
}
}
//in case the loop does not work
return result;
}
我期望的是,当结果Map已经具有i个元素的大小时,该方法将返回,并为我提供一个i-size排序的地图。请注意,rankMap
以我想要的特定顺序存储元素,并且其大小远大于我传递给该方法的int大小。我通过以下方式调用该方法
LinkedHashMap<String,Double> content=getTopRank(outputSize);
但是出乎意料的是,最终内容的大小rankMap
不是i
!在控制台中,我看到了数百Time to return
行。该行return result
一遍又一遍地执行,直到到达末尾rankMap
。我很确定这条线getTopRank(outputSize)
不是循环的。那令我感到奇怪的是,为什么该方法可以多次返回而不结束。是因为我在return
结束语中的推销声明造成的吗?请告知或告诉我Groovy中的情况如何。更进一步,我如何才能从排序后的映射中仅获取前k个元素?
您误解了Groovy的关键概念。
在结束each()
之前完成执行的唯一方法是引发异常。如果要有条件退出循环,请使用标准循环类型,例如for
或while
:
int count=0
def result = [:]
for( def e in rankMap ){
count++
result[ e.key ] = e.value
if( i <= count ) return result
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句