collectAll рекурсивно просматривает ваш список и возвращает логическое значение (поскольку именно это возвращает ваше закрытие для каждого элемента в списке) ...
Итак, вы получите [ false, true, true ]
, который имеет 3 элемента ...
Для count
,
list.count{ it.s == "two" }
Возвращает 2
(как и ожидалось)
Кстати: вы можете сделать it.s == 'two'
в Groovy .. нет необходимости для всех .equals( "two" )
Редактировать ... Пример для подсчета:
class TestObj {
String s
}
list = [ new TestObj( s:'one' ), new TestObj( s:'two' ), new TestObj( s:'two' ) ]
println( list.count { it.s == 'two' } )
Печать 2
для меня...
edit 2
Нашли причину (из комментария ниже), счетчик не принял закрытие в качестве параметра до 1,8, поэтому вы будете вызывать версия объекта , которая сообщит вам, сколько раз в списке существует экземпляр замыкания (которого нет, как говорится)