编写用于在scala中的listBuffer中存储数据的不可变代码

时间:2017-04-17 11:55:38

标签: scala apache-kafka immutability lagom

我有以下代码,其中我使用可变列表缓冲区来存储从kafka使用者收到的文件,然后当列表大小达到15时,我将它们插入到cassandra中。 但他们是否有办法使用不可变列表做同样的事情。

  val filesList = ListBuffer[SystemTextFile]()
  storeservSparkService.configFilesTopicInBatch.subscribe.atLeastOnce(Flow[SystemTextFile].mapAsync(4) { file: SystemTextFile =>
    filesList += file
    if (filesList.size == 15) {
      storeServSystemRepository.config.insertFileInBatch(filesList.toList)
      filesList.clear()
    }
    Future(Done)
  })

2 个答案:

答案 0 :(得分:3)

这些方面的东西?

Flow[SystemTextFile].grouped(15).mapAsync(4){ files =>
  storeServSystemRepository.config.insertFileInBatch(files)
}

答案 1 :(得分:0)

您是否尝试过使用Vector?

      val filesList = Vector[SystemTextFile]()
      storeservSparkService.configFilesTopicInBatch.subscribe.
          atLeastOnce(Flow[SystemTextFile].mapAsync(4) { file: SystemTextFile =>
       filesList = filesList :+ file
       if (filesList.length == 15) {
            storeServSystemRepository.config.insertFileInBatch(filesList.toList)
       }
       Future(Done)
     })