2012-06-10 6 views
7

Ho una lista che voglio dividere in modo simile al metodo (partition sz step col) di Clojure o alla funzione IterableLike.sliding(size: Int, step: Int) di Scala. In particolare, data una lista come:Puoi replicare le funzioni di Clojure (partizione) o Scala() con Guava?

(1, 2, 3) 

voglio essere in grado di scorrere i sotto-liste come:

(1, 2), (2, 3) 

In Clojure questo potrebbe essere fatto con:

(partition 2 1 (1, 2, 3)) 

e con Scala sarebbe:

val it = Vector(1, 2, 3).sliding(2) 

Tuttavia non ho un tale lusso e spero di evitare di dover girare il mio. Guava ha un metodo di partizione che si avvicina, ma non offre la sovrapposizione. Anche googling è stato infruttuoso. Esiste un tale metodo o dovrò eseguire il mio proprio?

+1

se nessuno conosce meglio, è possibile unire due partizioni guava, dove il secondo è da una sequenza con un elemento rilasciato ... –

+0

Non avresti bisogno delle partizioni * size *? Buona idea però. –

+0

È possibile utilizzare la mappa, ad esempio: '(mappa (fn [xy] '(x, y)) lst (resto lst)' – Ankur

risposta

1

Guava non ha nulla di simile in questo momento, ma se si file uno issue, possiamo discutere di aggiungerlo.

Per quanto mi riguarda, vorrei utilizzare uno ArrayDeque per memorizzare la finestra in esecuzione, ma questo non avrebbe senso per un metodo di libreria.

+0

Problema archiviato all'indirizzo http://code.google.com/p/guava-libraries/issues/detail?id=1027. –

2

Guava non ha questo, ma il suo AbstractIterator probabilmente renderà il "rolling your own" più facile.

Potrebbe esserci già un archivio feature request; in caso contrario, si senta libero.

Problemi correlati