我试图在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;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,比如使用.each()关键字或迭代其keySet,但没有保留其原始顺序,我最终得到的结果未排序.帮助和提示表示赞赏!!
您可以entrySet()从排序的地图中获取,其行为或多或少类似于列表,并从中获取范围:
def getKeywords(Map keywords, int itensQty){
def sorted=keywords.sort{ a, b ->
b.value <=> a.value;
}
sorted.entrySet().toList()[0..<itensQty]
}
keywords = ["a": 90, "b": 110, "c": 70, "d": 130]
assert getKeywords(keywords, 2) == ["d": 130, "b": 110].entrySet().toList()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |