documentacion docs groovy

docs - ¿Qué es el método Inject en Groovy?



grails documentation 2.4 4 (1)

Aplica una operación a una colección y realiza un seguimiento de un valor intermedio. Tome este ejemplo: [1, 2, 3, 4].inject(0, { sum, value -> sum + value }) . Esto dice que use 0 como el valor inicial y aplique la operación de suma al resultado intermedio y a cada elemento en secuencia. Cada aplicación de la operación genera un nuevo resultado intermedio. En este caso, el cierre suma los números, por lo que genera la suma de la lista. Puedes imaginarlo así:

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

O, en el caso de [1, 2, 3, 4].inject(0, { sum, value -> sum + value }) :

0 + 1 + 2 + 3 + 4

Para encontrar el producto de una lista, puede usar [1, 2, 3, 4].inject(1, { product, value -> product * value}) . En este caso, 1 se usa como valor inicial, ya que es el valor de identidad para la multiplicidad.

Aquí hay un ejemplo que divide una lista de cadenas de varias palabras en una lista plana de palabras:

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

Otros términos que a veces se usan para describir esta operación son "reducir", como en MapReduce , o un "fold" (específicamente un foldl ).

¿Qué hace realmente el método de inject en Groovy? Busqué en Google y no encontré la respuesta exacta. ¿Alguien puede especificar su uso con un simple ejemplo?