Я работаю над проектом Kotlin, где нам нужно анализировать коллекцию входящих файлов и отслеживать результат каждой операции. В настоящее время мы делаем что -то подобное: < /p>
fun parseFiles(dp:MyDataProvider, files:List)
{
//store the status of each processed file
val statusMap = mutableMapOf()
files.takeWhile{ currentFileNameToProcess ->
val statuses = processFile(currentFileNameToProcess)
//each group of files has a corresponding 'service' document
//serviceName() generates that group name based on the file name
statusMap.getOrPut(currentFileNameToProcess.serviceName(), ::mutableMapOf).putAll(mapOf( currentFileNameToProcess to statuses))
//This function will be part of an AWS lambda.
//To make sure we aren't running out of time,
//check the run time of the function against a threshold
!dp.thresholdExceeded.value()
}
}
< /code>
Я хочу, чтобы этот код лучше соответствовал «функциональному» кодированию. Я также хочу убедиться, что карта инициализирована со всеми именами файлов, даже если цикл заканчивается рано. Я выяснил, что могу сделать оба, используя GroupBy (), чтобы преобразовать свой список имен файлов в карту перед итерацией. < /P>
files.groupBy{ it.serviceName() }
< /code>
Проблема, которую я имею сейчас сейчас, заключается в том, что карта Kotlin не имеет функции Takewhile (). Поскольку эта функция управляется AWS Lambda, мы используем дубль для выхода из петли, когда достигается порог времени, чтобы избежать ошибок тайм -аута. Есть ли другая функция Kotlin для итерации через карту, пока не будет обнаружено условие?
Подробнее здесь: https://stackoverflow.com/questions/797 ... otlin-maps