Groovy 反转 Map 键

5

我想获取一个map的最后X个条目。

如果我想要获取前面的条目,可以通过groovy轻松完成:map.take(10) 可以得到map的前10个条目。但是如何获取最后10个条目呢?没有map.reverse() 方法。

1个回答

4
您可以这样使用drop
map.drop( map.size() - 10 )

要保留最后10个元素,可以使用以下方法:

list_name[-10:]

另一种方法是使用iterator,并将其反转:

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

但这样会更加混乱,使用的资源也更多。

运行得非常好。我已经阅读了一段时间的Map文档,显然我没有注意到。 - Pma
有人认为 LinkedHashMap 应该添加一个 reverse 方法,因为它确实具有顺序的概念。如果我有时间,我会尝试提供一个补丁。 - tim_yates
实际上,看起来几年前已经讨论过这个问题(http://jira.codehaus.org/browse/GROOVY-3992),但当时决定 reverseEach 已经足够了。但在这种情况下,它不够用 :-( - tim_yates
这正是我正在寻找的,我实际上有一个按日期排序并按sessionID分组的LinkedHashMap表示用户会话。因此,我得到了所有用户会话的映射,但我只需要最后10个会话。map.drop在这里起作用,但将其嵌入到Groovy中冗长的gsp表达式中,其中map是一个50个字符的表达式,有点麻烦。如果有一个reverse()方法,它会更加简洁。 - Pma
@Pma 你可以反转地图迭代器(请参见更新的答案),但这并不像参数化的drop那样好用... - tim_yates

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接