我需要从 CSV 文件读取到 Map 并将该 Map 传递给后端方法,问题是如果 Map 太大,后端方法可能会阻塞。所以我需要在传递它之前将 Map 分解成更小的块(分区)。这是我到目前为止尝试过的..
Map ginormousMap = extractMapFromFile()
Map batchedMap = [:]
int index = 0
for ( pair in ginormousMap ) {
def source = pair.key
def destination = pair.value
batchedMap.put(source,destination)
if(index > 0 && index % 100 == 0 ){
sendToFragileBackEnd(batchedMap)
batchedMap = [:]
}
index++
}
Run Code Online (Sandbox Code Playgroud)
我认为在每 100 个元素时,这会将较小的地图发送到后端并重新初始化它。
这行得通吗?有没有更好的办法?
一种简单的方法是使用collate()方法。
collate()方法可以将列表划分为指定大小的子列表。
如果集合是 Map(就像您的情况一样),您可以将 Map.keySet() 转换为 List,然后执行collate()方法。
Map fullMap = [a:1,b:2,c:3,d:4,e:5,f:6,g:7]
(fullMap.keySet() as List).collate(3).each{
def map = fullMap.subMap(it)
println map
}
Run Code Online (Sandbox Code Playgroud)
或在您的代码中...
Map ginormousMap = extractMapFromFile()
(ginormousMap.keySet() as List).collate(100).each{
sendToFragileBackEnd(ginormousMap.subMap(it))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1208 次 |
| 最近记录: |