拆分地图的最流行方式是什么?

时间:2017-03-21 21:27:53

标签: groovy hashmap

我需要从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个元素处,这会将较小的地图发送到后端并重新初始化。

这会有用吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

这样做的一种简单方法是使用 collat​​e()方法。

collat​​e()方法可以将列表划分为指定大小的子列表。

如果集合是Map(就像你的情况一样),你可以将Map.keySet()转换为List,然后执行 collat​​e()方法。

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;

我确信这不会开箱即用,并不美观,但我想你看到它背后的想法: - )