Приветствую читатель!
Здесь оставлю пример реализации пользовательской функции joinToString на Kotlin, написанную с использованием хвостовой рекурсии. Не претендую на лучшую реализацию, но как пример имеет место быть.
Kotlin
fun main() {
listOf("a", "r", "a", "z", "u", "m")
.joinToStringCustom(delimiter = '_', convert = String::uppercase)
.run(::println)
// вернет A_R_A_Z_U_M
}
/**
* Функция собирает элементы коллекции в строку
* @param [delimiter] - разделитель
* @param [convert] - функция применится для каждого элемента
* @return - Результирующая строка
*/
fun <T> List<T>.joinToStringCustom(delimiter: Char = ',', convert: (T) -> T): String {
tailrec fun _joinToString(acc: String, list: List<T>): String {
return when {
list.isEmpty() -> acc.trim(delimiter)
else -> {
_joinToString("$acc${list.first()}$delimiter", list.drop(1))
}
}
}
return _joinToString("", map { convert(it) })
}