【问题标题】:Groovy reverse map keysGroovy 反向映射键
【发布时间】:2012-09-12 12:45:03
【问题描述】:

我想获取地图的最后 X 个条目。

如果我想获得第一个条目,它可以在 groovy 中相当容易地完成:map.take(10) 让我获得地图的前 10 个条目。但是如何获得最后 10 个条目?没有map.reverse() 方法。

【问题讨论】:

    标签: groovy map


    【解决方案1】:

    你可以像这样使用drop

    map.drop( map.size() - 10 )
    

    删除最后 10 个元素以外的所有元素

    另一种方法是使用iterator,可以颠倒:

    map.iterator().reverse().take( 10 ).reverse().collect()
    

    但它更混乱,并且使用更多资源

    【讨论】:

    • 像魅力一样工作。我已经阅读 Map doc 有一段时间了,显然我没有注意到。
    • 有一个论点是LinkedHashMap 应该添加一个reverse 方法,因为它确实具有顺序的概念。如果我有时间,我会尝试提出一个补丁
    • 其实貌似是discussed a couple of years ago,但后来决定reverseEach就够了。在这种情况下,它不是 :-(
    • 这正是我正在寻找的,我实际上有一个 LinkedHashMap 代表按日期排序并按 sessionID 分组的用户会话。因此,我得到了所有用户会话的地图,我只需要最后 10 个会话。 map.drop 在这里工作,但是将它嵌入到 groovy 中的一个长 gsp 表达式中,其中 map 是一个 50 个字符的表达式有点麻烦。如果有reverse() 方法会更紧凑。
    • @Pma 您可以反转地图迭代器(请参阅更新的答案),但它不如参数化的 drop...
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多