从sortedmap获取前n个元素

Orl*_*doL 1 groovy treemap

我试图在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,但没有保留其原始顺序,我最终得到的结果未排序.帮助和提示表示赞赏!!

Wil*_*ill 5

您可以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)