Groovy中的inject
方法实际上做了什么?我用谷歌搜索,并没有找到确切的答案。任何人都可以用一个简单的例子来指定它的用途吗?
答案 0 :(得分:61)
它将操作应用于集合并跟踪中间值。举个例子:[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!"]