我需要从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++
}
我认为在每100个元素处,这会将较小的地图发送到后端并重新初始化。
这会有用吗?还有更好的方法吗?
答案 0 :(得分:4)
这样做的一种简单方法是使用 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
}
或在您的代码中......
Map ginormousMap = extractMapFromFile()
(ginormousMap.keySet() as List).collate(100).each{
sendToFragileBackEnd(ginormousMap.subMap(it))
}
答案 1 :(得分:0)
这样的事情:
std::cout << "Remaining Balance: " << balance << std::endl;
我确信这不会开箱即用,并不美观,但我想你看到它背后的想法: - )