代码之家  ›  专栏  ›  技术社区  ›  Yossale

Groovy:按值对散列键排序

  •  2
  • Yossale  · 技术社区  · 14 年前

    这似乎有效:

    groovy> def map = [a:5, b:3, c:6, d:4].sort { a, b -> a.value <=> b.value }.keySet() 
    groovy> println map 
    
    [b, d, a, c]
    

    但它会一直起作用吗?

    谢谢!

    1 回复  |  直到 14 年前
        1
  •  9
  •   robbbert    14 年前

    简短的回答 :是的 keySet() 方法将始终返回 命令 java.util.List

    冗长的回答

    考试开始于 groovy.runtime.DefaultGroovyMethods public static <K, V> Map<K, V> sort(Map<K, V> self, Closure closure) 方法返回 java.util.LinkedHashMap ,这是 命令 .

    LinkedHashMap Set<K> keySet() 方法在 java.util.HashMap Iterator 打电话给 Iterator<K> newKeyIterator() 方法,在 LinkedHashMap网站 类[4]。它返回一个 LinkedHashMap$KeyIterator ,它[定义 K next() 方法,该方法在内部调用 Entry<K,V> nextEntry() 方法,它返回 Entry 定义在 LinkedHashMap$Entry.after 字段。

    最后,我们可以看到 LinkedHashMap$Entry.addBefore(Entry<K,V> existingEntry) 方法 LinkedHashMap$条目.after 命令 态度。


    哦天哪。。。我把我做的每一个语句都链接到 groovy.runtime.DefaultGroovyMethods方法 , java.util.LinkedHashMap ,总共10个超链接。不幸的是,作为Stackoverflow的新手,我只被允许发布一个,必须删除大多数链接。。。对不起的。