En este tutorial te mostraremos como usar la función find
en Kotlin para encontrar el primer elemento de una colección que cumpla con el predicado establecido.
La Función find()
Las diferentes formas de la función find
toman como parámetro un predicado de tipo función, el cual representa la condición que debe cumplir el elemento que deseas encontrar.
Si no se encuentra una coincidencia, el valor retornado es null
. Si existe más de una coincidencia, entonces el resultado será la primera encontrada. La siguiente es la sintaxis de sus formas:
// Arrays
inline fun <T> Array<out T>.find(
predicate: (T) -> Boolean
): T?
// Iterables
inline fun <T> Iterable<T>.find(
predicate: (T) -> Boolean
): T?
Ejemplo De find Con Lista
Tomemos como ilustración una lista de enteros de la cual se desea conocer:
- El primer elemento que sea negativo
- El primer elemento que sea positivo
- El primer número impar
- El primero que pertenezca al subconjunto
[5,10]
- El primer elemento que sea mayor a cien:
fun main() {
val numbers = listOf(2, 3, 1, 0, -1, 4, -7, 10)
println(numbers.find { it < 0 }) // -1
println(numbers.find { it > 0 }) // 2
println(numbers.find { it % 2 != 0 }) // 3
println(numbers.find { it in 5..10 }) // 10
println(numbers.find{ it > 100}) // null
println(numbers.find { true }) // 2
println(numbers.find { false }) // null
}
Como ves, cuando el predicado es satisfecho la primera vez se retorna al elemento. Si el elemento no existe como en la línea del predicado { it > 100 }
, obtendrás null
.
Ejemplo De find Con String
La clase CharSecuence
también tiene creada una función de extensión find
para encontrar el carácter que cumpla con las proposiciones del predicado proveído.
Considera una cadena de texto en la cual deseamos encontrar al primer carácter que no sea un espacio en blanco.
fun main() {
val string = " Kotlin"
val isCharacter = { c: Char -> !c.isWhitespace() }
println(string.find(isCharacter)) // K
}
La solución consiste en usar la función Char.isWhitespace
, la cual determina si es el carácter espacio en blanco. Luego se crea una función lambda almacenada en isCharacter
. La idea es negar el resultado del isWhitespace()
y luego pasarlo a find{ }
.
Evidentemente el resultado es el carácter 'K'
al ser el primer elemento diferente de un espacio en blanco.
Únete Al Discord De Develou
Si tienes problemas con el código de este tutorial, preguntas, recomendaciones o solo deseas discutir sobre desarrollo Android conmigo y otros desarrolladores, únete a la comunidad de Discord de Develou y siéntete libre de participar como gustes. ¡Te espero!