Назначьте "это" на каждой итерации (groovy)

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

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

Но это работает только в закрытии, в списке строки все еще "foo", "bar" и "groovy".

Как я могу это достичь?

Ответ 1

list = list.collect { it.trim() }

Ответ 2

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

def list = [" foo", "bar ", " groovy "]
list = list*.trim()
assert "foo" == list[0]
assert "bar" == list[1]
assert "groovy" == list[2]

Ответ 3

В соответствии с Groovy Быстрый старт использование collect будет собирать значения, возвращаемые из закрытия.

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

groovy:000> ["a    ", "  b"].collect { it.trim() }
===> [a, b]

Ответ 4

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

collect() лучше.

Ответ 5

@sepp2k Я думаю, что работает в рубине

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