GroovyIterable.collate(int size)
通过类添加方法DefaultGroovyMethods
,您可以使用它将输入数组拆分为 n 大小的块,例如
['a','b','c','d','e'].collate(3) == [['a','b','c'], ['d','e']]
考虑以下示例:
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
final String text = '[{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}]'
final List<Map> json = new JsonSlurper().parseText(text) as List<Map>
json.collate(2).each { part ->
final String out = JsonOutput.toJson(part)
println "Sending following JSON object: ${out}"
}
Run in Groovy web console
这里我们有一个包含 6 个对象的 JSON 数组。我们将这个 JSON 解析为一个List<Map>
对象,然后我们分成大小为 2 的块并准备 JSON 以供以后执行。我只使用了 6 个对象作为说明,但是如果初始列表包含 100 个对象并且我们分成大小为 10 的块并不重要 - 算法是相同的。
它可以概括和描述为以下步骤:
- 解析对象的初始 JSON 数组
- 将数组拆分为大小为 10 的块
- 将 10 个对象的块格式化为 JSON 字符串
- 处理 JSON 文档
上面显示的示例产生以下输出:
Sending following JSON object: [{"id":1},{"id":2}]
Sending following JSON object: [{"id":3},{"id":4}]
Sending following JSON object: [{"id":5},{"id":6}]