2012-09-12 12 views
5

Vorrei ottenere le ultime X voci di una mappa.Tasti mappa rovesciata Groovy

Se desidero ottenere le prime voci, è possibile farlo abbastanza facilmente in groovy: map.take(10) mi ottiene le prime 10 voci di una mappa. Ma come ottenere ULTIME 10 voci? non esiste il metodo map.reverse().

risposta

4

Potreste usare drop in questo modo:

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

Per escludere tutti, ma gli ultimi 10 elementi

Un'alternativa sarebbe quella di utilizzare il iterator, che può essere invertita:

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

Ma è molto più caotico, e usa più risorse

+0

Funziona come un fascino. Ho letto Map doc per qualche tempo e apparentemente non me ne sono accorto. – Pma

+0

C'è un argomento per cui 'LinkedHashMap' dovrebbe avere un metodo' reverse' aggiunto in quanto ha il concetto di ordine. Se avrò tempo, cercherò di trovare una patch –

+0

In realtà, sembra che sia stata [discussa un paio di anni fa] (http://jira.codehaus.org/browse/GROOVY-3992), ma è stato deciso che ['reverseEach'] (http://groovy.codehaus.org/groovy-jdk/java/util/Map.html#reverseEach%28groovy.lang.Closure%29) era sufficiente. In questo caso, non è :-( –

Problemi correlati