присваивать "это" в каждой итерации (заводной) - PullRequest
11 голосов
/ 22 сентября 2009

Эй, я пытаюсь обрезать каждый строковый элемент списка в groovy

list.each() { it = it.trim(); }

Но это работает только внутри замыкания, в списке строки по-прежнему "foo", "bar" и "groovy".

Как мне этого добиться?

Ответы [ 5 ]

23 голосов
/ 22 сентября 2009
list = list.collect { it.trim() }
6 голосов
/ 22 сентября 2009

Вы также можете использовать оператор распространения:

def list = [" foo", "bar ", " groovy "]
list = list*.trim()
assert "foo" == list[0]
assert "bar" == list[1]
assert "groovy" == list[2]
2 голосов
/ 22 сентября 2009

Согласно Groovy Quick Start , использование collect будет собирать значения, возвращаемые из замыкания.

Вот небольшой пример использования Groovy Shell:

groovy:000> ["a    ", "  b"].collect { it.trim() }
===> [a, b]
1 голос
/ 23 сентября 2009

Если вам действительно нужно изменить список на месте, вы можете использовать list.eachWithIndex {item, idx -> list [idx] = item.trim ()}.

collect () намного лучше.

0 голосов
/ 22 сентября 2009

@ sepp2k я думаю, что работает в ruby ​​

и это работает в Groovy list = list.collect () {it.trim (); }

...