Métodos Especiais

Métodos Especiais

Observação: O arquivo utilizado neste conteúdo que fala sobre alguns dos métodos e atributos especiais é o 6-metodosEspeciais.kt.

Pronto para mais um conteúdo?

Métodos Especiais em Coleção de Dados

Neste conteúdo você vai aprender a utilizar alguns métodos e atributos que o Kotlin nos disponibiliza para que possamos trabalhar mais facilmente com nossas coleções de dados.

Para iniciar nossos estudos, vamos criar como base 3 variáveis, onde cada uma delas representa um tipo diferente de coleção de dados:

val list1 : List<Int> = listOf(1, 2, 3, 4, 5)//Coleção de dados do tipo List.

val set1: Set<String> = setOf<String>("João", "Victor", "Felipe", "William")//Coleção de dados do tipo Set.

val map1 = mapOf<String, Int>(Pair("Micilini", 1), Pair("William", 2))//Coleção de dados do tipo Map.

Lembrando que no código acima, cada uma daquelas coleções poderiam ser do tipo Mutable, como mutableListOf, mutableSetOf ou mutableMapOf.

Funções Any e Count

Em nossas coleções, nós temos acesso às funções Any e Count.

Any) Significa algum, e a sua missão é verificar se existe algum elemento dentro da coleção:

println(listOf<Int>().any())//Retorna falso, pois temos uma lista vazia.

println(list1.any())//Retorna true, pois a list1 possuí 5 elementos.

println(set1.any())//Retorna true, pois o set1 possuí 4 elementos.

println(map1.any())//Retorna true, pois o map1 possuí 2 elementos de chave-valor.

Count) Significa contar, e a sua missão é contar o número de elementos que existem em uma coleção:

println(listOf<Int>().count())//Retorna 0, pois se trata de uma lista vazia.

println(list1.count())//Retorna o números de elementos de list1.

println(set1.count())//Retorna o número de elementos de set1.

println(map1.count())//Retorna o número de elementos de map1.

Funções First e Last

First) Significa primeira, e a sua missão é recuperar o primeiro elemento existente em uma lista:

println(list1.first())
println(set1.first())

//println(map1.first())//Não funciona com o Map, pois ele possui uma estrutura diferente.

Last) Significa último, e a sua missão é recuperar o último elemento existente em uma lista:

println(list1.last())
println(set1.last())

O único problema dos retornos vistos acima, é quando a nossa coleção se encontra vazia.

Para isso dispomos de um outro método que verifica se nossa coleção é nula, onde em caso positivo é retornado nulo, observe:

println(list1.firstOrNull())//Recupera o primeiro elemento da lista se existir, se não retorna nulo
println(list1.lastOrNull())//Recupera o último elemento da lista se existir, se não retorna nulo

println(set1.firstOrNull())//Recupera o primeiro elemento da lista se existir, se não retorna nulo
println(set1.lastOrNull())//Recupera o último elemento da lista se existir, se não retorna nulo

Funções Sum e SumOf:

Sum) Se todos os elementos presentes em uma coleção forem numéricos (Int, Float, Double) ele faz a soma de todos eles:

println(list1.sum())//Faz a soma de todos os números da coleção (só funciona se for numérico, sejam eles INT, FLOAT ou DOUBLE)

SumOf) Significa soma de, e a sua missão é selecionar cada elemento da coleção de forma a fazer uma soma personalizada:

println(list1.sumOf { it * 2 })//It representa o elemento em si, onde pegamos ele e multiplicamos por 2, o resultado será adicionado a soma total

Observe que no comando acima, ele contém um predicado, onde ele soma todos os números daquela lista depois de tê-los multiplicado por 2.

Função Filter

Com a função filter, nós criamos um predicado de modo a filtrar somente os valores que nós queremos:

println( set1.filter { it.length > 5 } )//Neste comando estamos filtrando todos os nomes que possuem caracteres maiores que 5

É importante ressaltar que tanto as funções Any e Count, trabalham com predicados, observe:

set1.any { it.length > 5 }//Any também trabalha com predicados, aqui estamos verificando se existe algum nome onde o total de caracteres é maior que 5

list1.count{ it > 3 }//Count também trabalha com predicados, aqui estamos verificando se existe algum valor maior que 3, se existem ele começa a contagem a partir destes.

Funções Take e TakeLast

Take) Recupera a quantidade de elementos que você seleciona no começo da lista:

list1.take(2)//Quantos elementos você seleciona no começo da lista? Neste caso estamos selecionando os 2 primeiros

TakeLast) Recupera a quantidade de elementos que você seleciona no final da lista:

list1.takeLast(2)//Quantos elementos você seleciona no final da lista? Nesse caso estamos selecionando os 2 últimos.

Função ForEach

Assim como o For, podemos fazer o uso do método ForEach para interagir sobre cada um dos elementos presentes em nossa lista, vejamos:

list1.forEach {
println(it)//Passa item por item retornando o valor
}

set1.forEach {
println(it)//Passa item por item retornando o valor
}

map1.forEach{
println(it.key)//Recupera a chave
println(it.value)//Recupera o valor
}

Funções Max & Min

MaxOf) Retorna o número máximo existente na lista:

listOf(1, 4, 9).maxOf { it }//Qual o número máximo da lista? Podemos usar predicados também.

listOf(1, 4, 9).maxOrNull()//Qual o número máximo da lista? Se tiver vazio retorna nulo.

MinOf) Retorna o número mínimo existente na lista:

listOf(1, 4, 9).minOf { it }//Qual o número minímo da lista? Podemos usar predicados também.

listOf(1, 4, 9).minOrNull()//Qual o numero mínimo da lista? Se tiver vazio retorna nulo.

Temos também o MaxByOrNull e o MinByOrNull onde podemos trabalhar também com predicados:

println(list1.maxByOrNull { it })
println(list1.minByOrNull { it })

Funções Map

Essas funções tem por objetivo realizar um mapeamento em toda a sua coleção de modo a retornar uma nova lista a partir de algo.

println(list1.map {it * it})//Cria uma nova lista retornando cada item existente em list1 multiplicado por si mesmo.

Tenha em mente que essas funções podem ser usadas em conjunto, observe:

println(list1.map { it + 2 }.sum())//Cria uma lista onde cada item do 'list1é somado com 2, para no final retornar a soma total

Função Average

Essa função retorna a média entre alguns números informados:

println(listOf(1, 2).average())//Retorna a média

Função Distinct, Sorted & Reversed

Distinct) Retorna valores distintos, ou seja, retorna valores que se repetem uma única vez:

println(listOf(1, 4, 5, 6, 3, 2, 8, 1, 1, 1, 1, 1, 3).distinct())
println(listOf(1, 4, 5, 6, 3, 2, 8, 1, 1, 1, 1, 1, 3).distinctBy {it > 4})

Sorted) Por padrão retorna valores ordenados, do menor para o maior. Já o SortedDescending, retorna do maior para o menor:

println(listOf(1, 4, 5, 6, 3, 2, 8, 1, 1, 1, 1, 1, 3).sorted())//Retorna valores ordenados, DO MENOR PARA O MAIOR
println(listOf(1, 4, 5, 6, 3, 2, 8, 1, 1, 1, 1, 1, 3).sortedDescending())//Retorna valores ordenados, DO MAIOR PARA O MENOR

Reversed) Retorna uma nova lista com os valores em ordem reversa

println(listOf(1, 4, 5, 6, 3, 2, 8, 1, 1, 1, 1, 1, 3).reversed())//Ordenação reversa da lista

Conclusão

Neste conteúdo você aprendeu diversos métodos e atributos que nos ajudam a trabalhar com coleções de dados.

Até o próximo conteúdo 😄