2012-09-12 15 views
5

Chciałbym uzyskać ostatnie X wpisów mapy.Groovy odwróć klucze mapy

Jeśli chciałbym uzyskać pierwsze wpisy, można to zrobić dość łatwo w groovy: map.take(10) dostaje mi pierwsze 10 wpisów na mapie. Ale jak zdobyć OSTATNIE 10 wpisów? nie ma metody map.reverse().

Odpowiedz

4

Można użyć drop tak:

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

Aby usunąć wszystkie oprócz ostatnich 10 elementów

Alternatywą byłoby użyć iterator, który można odwrócić:

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

ale to dużo bałaganu i zużywa więcej zasobów

+0

działa jak urok. Od pewnego czasu czytam dokumentację Mapy i najwyraźniej tego nie zauważyłem. – Pma

+0

Istnieje argument, że 'LinkedHashMap' powinna mieć dodaną metodę' reverse', ponieważ ma ona pojęcie porządku. Jeśli mam czas, będę próbować wymyślić plaster –

+0

Faktycznie, wygląda na to, że to [omówiono kilka lat temu] (http://jira.codehaus.org/browse/GROOVY-3992), ale zadecydowano, że ["reverseEach"] (http://groovy.codehaus.org/groovy-jdk/java/util/Map.html#reverseEach%28groovy.lang.Closure%29) było wystarczające. W tym przypadku, nie jest :-( –