Groovy adds a split() method to objects with a closure parameter. In the closure we must define a condition to split up the items in two lists. One list contains all the items that apply to the closure condition, the other list contains the rest of the items that don't apply to the closure condition.
def range = 1..10
def (even, odd) = range.split { it % 2 == 0 }
assert [2,4,6,8,10] == even
assert [1,3,5,7,9] == odd
def map = [language: 'Groovy', username: 'mrhaki', age: 36]
def (strings, others) = map.split { it.value instanceof String }
assert 2 == strings.size()
assert 1 == others.size()
assert 'language' == strings[0].key && 'Groovy' == strings[0].value
assert 'username' == strings[1].key && 'mrhaki' == strings[1].value
assert 'age' == others[0].key && 36 == others[0].value