Gopal S Akshintala
04/19/2020, 3:14 PMinternal class MyRecursiveTask(private val names: List<String?>) : RecursiveTask<String>() {
override fun compute(): String = if (names.size > MIN_LIST_SIZE) {
val mid = names.size / 2
val myRecursiveTask1 = MyRecursiveTask(names.subList(0, mid))
val myRecursiveTask2 = MyRecursiveTask(names.subList(mid, names.size))
myRecursiveTask1.fork()
myRecursiveTask2.fork()
val results = ArrayList<String>()
results.add(myRecursiveTask1.join())
results.add(myRecursiveTask2.join())
concat(results) // This just concats strings
} else {
concat(names) // This just concats strings
}
companion object {
private const val serialVersionUID = -5978274303314688527L
private const val MIN_LIST_SIZE = 2 // In real-world, DO NOT have it below 10,000
}
}
Dominaezzz
04/19/2020, 3:44 PMsuspend fun recursiveTask(names: List<String?>): String {
val MIN_LIST_SIZE = 2 // In real-world, DO NOT have it below 10,000
return if (names.size > MIN_LIST_SIZE) {
val mid = names.size / 2
val results = coroutineScope {
val leftTask = async { recursiveTask(names.subList(0, mid)) }
val rightTask = async { recursiveTask(names.subList(mid, names.size)) }
listOf(leftTask.await(), rightTask.await())
}
concat(results) // This just concats strings
} else {
concat(names) // This just concats strings
}
}
val actualResult = runBlocking(Dispatchers.Default) {
recursiveTask(TEAM)
}
Gopal S Akshintala
04/21/2020, 4:28 AM