listgroovybuilt-in

How to split a list into equal sized lists in Groovy?


If I have this:

def array = [1,2,3,4,5,6]

Is there some built-in which allows me to do this ( or something similar ):

array.split(2)

and get:

[[1,2],[3,4],[5,6]]

?


Solution

  • I agree with Chris that there isn't anything built into groovy to handle this (at least for more than 2 partitions), but I interpreted your question to be asking something different than he did. Here's an implementation that does what I think you're asking for:

    def partition(array, size) {
        def partitions = []
        int partitionCount = array.size() / size
    
        partitionCount.times { partitionNumber ->
            def start = partitionNumber * size 
            def end = start + size - 1
            partitions << array[start..end]    
        }
    
        if (array.size() % size) partitions << array[partitionCount * size..-1]
        return partitions    
    }
    
    
    def origList = [1, 2, 3, 4, 5, 6]
    assert [[1], [2], [3], [4], [5], [6]] == partition(origList, 1)
    assert [[1, 2], [3, 4], [5, 6]] == partition(origList, 2)
    assert [[1, 2, 3], [4, 5, 6]] == partition(origList, 3)
    assert [[1, 2, 3, 4], [5, 6]] == partition(origList, 4)
    assert [[1, 2, 3, 4, 5], [6]] == partition(origList, 5)
    assert [[1, 2, 3, 4, 5, 6]] == partition(origList, 6)