Groovy 分割地图最常用的方法是什么?
我需要将CSV文件读入映射,并将该映射传递给后端方法,问题是如果映射太大,后端方法可能会阻塞。因此,在传递之前,我需要将映射分解为更小的块(分区)。这是我到目前为止试过的Groovy 分割地图最常用的方法是什么?,groovy,hashmap,Groovy,Hashmap,我需要将CSV文件读入映射,并将该映射传递给后端方法,问题是如果映射太大,后端方法可能会阻塞。因此,在传递之前,我需要将映射分解为更小的块(分区)。这是我到目前为止试过的 Map ginormousMap = extractMapFromFile() Map batchedMap = [:] int index = 0 for ( pair in ginormousMap ) { def source = pair.key def destination = pair.value
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++
}
我认为在每100个元素中,这会将较小的映射发送到后端并重新初始化它
这样行吗?有更好的方法吗?像这样的方法怎么样:
Map ginormousMap = extractMapFromFile()
(ginormousMap.size()/100).times { i ->
sendToFragileBackEnd(ginormousMap[i*100..(i+1)*100-1)
}
我确信这不会开箱即用,也不美观,但我想你看到了它背后的想法:-)一个简单的方法是使用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
}
collate()方法允许将列表划分为指定大小的子列表
如果集合是一个映射(在您的情况下),您可以将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
}
或者在你的代码中
Map ginormousMap = extractMapFromFile()
(ginormousMap.keySet() as List).collate(100).each{
sendToFragileBackEnd(ginormousMap.subMap(it))
}
我喜欢你的建议,你介意把它清洗一下,这样它就可以开箱即用了吗?谢谢对我来说似乎太晚了是地图吗?确定这不是一个地图列表吗?我可能应该加上collate将一个列表拆分为一个列表列表,列表的大小由参数决定。