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

Abu*_*iam 2 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++

}
Run Code Online (Sandbox Code Playgroud)

我认为在每 100 个元素时,这会将较小的地图发送到后端并重新初始化它。

这行得通吗?有没有更好的办法?

Dav*_* CK 5

一种简单的方法是使用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
}
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)