【发布时间】:2015-09-18 12:45:05
【问题描述】:
我正在尝试通过以下代码从排序地图中获取前 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 i。
我通过
LinkedHashMap<String,Double> content=getTopRank(outputSize);
但没想到最终内容的大小是rankMap而不是i!在控制台中,我看到了数百行 Time to return 行。 return result 行一次又一次地执行,直到到达rankMap 的末尾。
我很确定getTopRank(outputSize) 这行没有循环。然后我觉得奇怪为什么这个方法可以多次返回而没有结束。是因为我在闭包中放入了return 语句吗?
请告知或告诉我这在 Groovy 中是如何实现的。更进一步,我怎样才能从排序的地图中只获取前 k 个元素?
【问题讨论】:
-
使用 collect 而不是 each 你可以实现你的目标
-
收集没有多大帮助
-
有些语言有“yield”的概念,Groovy 没有。存在一些 SO 讨论,(免责声明不能说质量)stackoverflow.com/questions/30743472/…
标签: groovy