viernes, 11 de febrero de 2011

GROOVY - Split en listas y mapas

Esta vez os traigo el método split para listas (List) y mapas (Map) en groovy. Se añaden a las propias clases mediante metaprogramación.

Si estáis utilizando grails, podéis incluirlos en el Bootstrap de vuestra aplicación para tenerlos siempre disponibles.

List.metaClass.split << { size ->
 def result = []
 if (delegate.size()>0)
 {
  def max = delegate.size() - 1
  def regions = (0..max).step(size.toInteger())
  def end
  regions.each { start ->
     end =  Math.min(start + size.toInteger() - 1, max)
     result << delegate[start..end]
  }
 }
  
 return result
}
  
Map.metaClass.split << { size ->
 def result = []
 int i=0
 int pos=0
 for (el in delegate)
 {
  if (i<size)
  {
   if (!result[pos])
   {
    result[pos]=[:]
   }
   i++
  }
  else
  {
   pos++
   result[pos]=[:]
   i=1
  }
  result[pos][el.key]=el.value
 }
 
 return result
}

Espero que os sirvan.
Enjoy!

0 comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More