我尝试将字符串的频率存储在TreeMap中,以便获得特定用户最常用的字符串。现在,我想做的是编写一个方法,使我从排序后的地图中返回前n个项目(经常使用的排名靠前的项目)。
public TreeMap<String,Integer> getKeywords(int n){
//Can check if sorted for efficiency!
println keywords.size();
keywords=keywords.sort{a,b->
//sort the map desc by value
b.value <=> a.value;
}
TreeMap<String,Integer> result=new TreeMap<>();
//need to fill result with first n elements from keywords
return result;
}
我尝试了几种方法,例如.each()
在关键字上使用关键字或通过其keySet进行迭代,但没有一种方法可以保留其原始顺序,最终导致结果未排序。帮助和提示表示赞赏!
我不了解Groovy,所以我只能评论Java。
ATreeMap
使条目按键(而不是值)排序。在您的情况下,它使用的自然顺序String
。
如果要Map
保持插入顺序,请使用LinkedHashMap
。如果这样做,则需要将返回类型更改为Map<String, Integer>
。
由于不清楚某些变量的类型,因此我无法编写详细的代码,但是基本步骤如下:
List
keywords
根据value
字段排序。Map<String, Integer> map = new LinkedHashMap<String, Integer>();
n
项目keywords
并进行填充map
。因为您使用的LinkedHashMap
是条目,所以它们将保持正确的顺序。return map;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句