2012-09-12 6 views
5

Ich möchte die letzten X-Einträge einer Karte erhalten.Groovy Reverse Map Keys

Wenn ich die ersten Einträge bekommen möchte, kann es in groovy ziemlich einfach gemacht werden: map.take(10) bringt mir die ersten 10 Einträge einer Karte. Aber wie bekomme ich 10 Einträge? Es gibt keine map.reverse() Methode.

Antwort

4

könnten Sie drop verwenden wie so:

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

alle fallen zu lassen, aber die letzten 10 Elemente

Eine Alternative wäre die iterator zu verwenden, die rückgängig gemacht werden kann:

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

Aber es ist viel unordentlicher und verwendet mehr Ressourcen

+0

funktioniert wie Ein Zauber. Ich lese Map doc seit einiger Zeit und anscheinend habe ich es nicht bemerkt. – Pma

+0

Es gibt ein Argument, dass 'LinkedHashMap' eine' reverse' -Methode haben sollte, da es das Konzept der Ordnung hat. Wenn ich Zeit bekomme, werde ich versuchen, mit einem Patch zu kommen –

+0

Eigentlich sieht es so aus als wäre es [vor ein paar Jahren diskutiert] (http://jira.codehaus.org/browse/GROOVY-3992), aber Es wurde entschieden, dass ['reverseEach'] (http://groovy.codehaus.org/groovy-jdk/java/util/Map.html#reverseEach%28groovy.lang.Closure%29) ausreichend war. In diesem Fall ist es nicht :-( –