Подтвердить что ты не робот

Что такое метод Inject в Groovy?

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

4b9b3361

Ответ 1

Он применяет операцию к коллекции и отслеживает промежуточное значение. Возьмите этот пример: [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, поскольку оно является идентификационным значением для mulitplication.

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

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

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