En Kotlin 1.4.0, la biblioteca estándar contiene varias funciones útiles para trabajar con colecciones y campos.
Colecciones:
Las colecciones contienen algunos objetos del mismo tipo. Hay varios tipos de colecciones, como Lista, Conjunto, Mapa. En Kotlin 1.4.0, incluyen los siguientes métodos nuevos para las colecciones:
(y). mezclado (): Este método se utiliza para mezclar la secuencia, devolviendo una nueva lista con elementos de esta lista mezclados aleatoriamente.
val list = listOf('a', 'b', 'c', 'd', 'e', 'f')
val result = list.shuffled()
//the result will something like [c, b, f, d, a, e]
ii). total(): devuelve la suma de sus valores para todos los elementos de la colección. Este método puede crear sumas de tipos Int
, Long
, Double
, UInt
, un ULong
.
data class Employe(val name: String, val salary: Double)val employes = listOf<Employe>( Employe("Gunjan", salary = 50000),
Employe("Iti", salary = 40000),
Employe("Manish", salary = 60000),
Employe("Suraj", salary = 80000) )val employesSalary = employes.sumOf{ it.salary }
//result of employesSalary = 230000
(iii). setOfNotNull (): que da un conjunto que consta de todos los elementos distintos de cero con los argumentos dados.
val notNullSet = setOfNotNull(10, 20, null, 40, 50, null)
//result of notNullSet = [10, 20, 40, 50]
(iv). onEachIndexed (): Realiza la operación dada en cada elemento de la colección, proporciona un índice de secuencia con el elemento y luego devuelve la colección en sí.
val list = listOf("Chandan", "Manish", "Suraj", "Kundan")
list.onEachIndexed {
index, item -> println(index.toString() + ":" + item)
}//will print 0:Chandan 1:Manish 2:Suraj 3:Kundan
(en contra). flatMapIndexed (): Devuelve una lista de todos los elementos generados a partir de los resultados. convertir una función invocada en cada elemento y su índice en la colección original.
val list = listOf("Hello", "kot", "lin", "world")
val kotlin = list.flatMapIndexed { index, item ->
if (index in 1..2) item.toList() else emptyList()
}//result of kotlin = [k, o, t, l, i, n]
(vi). * OrNull (): Ellos están volviendo null
en colecciones vacías.
val list = listOf("Alice" to 42, "Bob" to 28, "Carol" to 51)
val oldestPerson = list.maxByOrNull { it.second }
// oldestPerson = (Carol, 51)val list = emptyList<Pair<String, Int>>()
val max = list.maxByOrNull { it.second }
// because the list is empty, max = null
(vii). runningFold (): Devuelve una lista que contiene los valores de acumulación secuencial generados al aplicar la operación de izquierda a derecha a cada elemento y el valor del acumulador actual que comienza con el valor inicial.
val strings = listOf("a", "b", "c", "d")
strings.runningFold("s") { acc, string -> acc + string }
// result of strings = [s, sa, sab, sabc, sabcd]strings.runningFoldIndexed("s") { index, acc, string -> acc + string + index }
// result of strings = [s, sa0, sa0b1, sa0b1c2, sa0b1c2d3]Note that acc value passed to operation function should not be mutated; otherwise, it would affect the previous value in the resulting list.
Campo:
Los siguientes métodos nuevos incluyen colecciones:
(y). mezcla(): Mezcla aleatoriamente los elementos de este campo en su lugar utilizando la instancia aleatoria especificada como fuente de aleatoriedad.
val array = arrayOf(1, 2, 3, 4, 5)
array.shuffle()
//result of array = [3, 4, 1, 5, 2]
ii). en cada (): Realiza la acción en cada elemento y luego devuelve el campo en sí.
var language = ""
val array = arrayOf("k", "o", "t", "l", "i", "n")
val result = array.onEach { language += it }
//here language = kotlin
(iii). conectar con(): Devuelve un Mapa donde las claves son elementos de una matriz dada y los valores son creados por la función valueSelector aplicada a cada elemento.
val words = listOf("a", "abc", "ab", "def", "abcd")
val withLength = words.associateWith { it.length }
println(withLength.keys) // [a, abc, ab, def, abcd]
println(withLength.values) // [1, 3, 2, 3, 4]
Implementación de una cola bidireccional. Una cola de dos caras le permite agregar o eliminar elementos al principio y al final de la cola. los ArrayDeque
la implementación usa un campo modificable debajo de él: almacena el contenido en un búfer circular, un Array
y lo cambia de tamaño Array
solo cuando está lleno.
val deque = ArrayDeque(listOf(1, 2, 3))deque.addFirst(0)
deque.addLast(4)
println(deque) // [0, 1, 2, 3, 4]println(deque.first()) // 0
println(deque.last()) // 4deque.removeFirst()
deque.removeLast()
println(deque) // [1, 2, 3]