Что такое метод инъекций в Groovy? - PullRequest
37 голосов
/ 06 марта 2011

Что на самом деле делает метод inject в Groovy? Я гуглил это, и не нашел точного ответа. Кто-нибудь может указать его использование на простом примере?

1 Ответ

62 голосов
/ 06 марта 2011

Применяет операцию к коллекции и отслеживает промежуточное значение. Возьмите этот пример: [1, 2, 3, 4].inject(0, { sum, value -> sum + value }). Это говорит об использовании 0 в качестве начального значения и применении операции сложения к промежуточному результату и каждому элементу в последовательности. Каждое применение операции генерирует новый промежуточный результат. В этом случае замыкание складывает числа, поэтому оно генерирует сумму списка. Вы можете представить это как:

<initial value> <operation> <element1> <operation> ... <elementn>

Или, в случае [1, 2, 3, 4].inject(0, { sum, value -> sum + value }):

0 + 1 + 2 + 3 + 4

Чтобы найти продукт из списка, вы можете использовать [1, 2, 3, 4].inject(1, { product, value -> product * value}). В этом случае в качестве начального значения используется 1, поскольку это значение идентификатора для мультипликации.

Вот пример, который разбивает список строк из нескольких слов в плоский список слов:

strings = ["", "this", "is a", "test of inject!"]
words = strings.inject([], { list, value -> list + value.tokenize() })
assert words == ["this", "is", "a", "test", "of", "inject!"]

Другие термины, которые иногда используются для описания этой операции, - «уменьшить», как в MapReduce , или «свернуть» (в частности, foldl ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...