Kotlin 集合函数锦集,这操作真香

时间:2024-10-09 07:15:47

val numList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val chunkedLists = (3)
println(chunkedLists) // [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
}

复制数组相关函数

你可以通过使用各种函数来复制现有的数组,例如:

  • copyInto

copyInto可以把一个数组的元素替换成另一个数组,或者,如果目标数组由于大小限制或索引越界而不能保存原始数组的元素,则会出现异常。

//复制数组
fun copyIntoArray(){
val arrayOne = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val arrayTwo = arrayOf(11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
//将数组arrayOne中从索引0开始(即第1个元素)取出四个元素(即前四个元素)替换数组arrayTwo从索引2开始(即第三个元素)之后的4个元素
(destination = arrayTwo, destinationOffset = 2, startIndex = 0, endIndex = 4)
{print("$it ")} // 11 12 1 2 3 4 17 18 19 20
}

  • copyOfRange(fromIndex, toIndex)

返回一个新数组,该数组是原数组指定范围的副本。

fun copyOfRangeArray(){
val arrayRange = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val copyOfRange = (0, 6)
{ print("$it ") }//1 2 3 4 5 6
}

  • copyOf() or copyOf(newSize)

回一个新数组,它是原数组的副本,大小调整为给定的newSize,或者如果newSize未被指定,则整个数组将被复制。

fun copyOfArray(){
val arrayData = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val copyOf = ()//1 2 3 4 5 6 7 8 9 10
{ print("KaTeX parse error: Expected 'EOF', got '}' at position 7: it ") }̲ println() val …it ") }
}

更改集合类型

根据情况,您可以更改集合的类型。在这里,您可以通过创建一个新集合或引用旧集合来将一个集合的类型更改为另一个集合。例如

  • toIntArray, toBooleanArray, toLongArray, toShortArray, toByteArray, toDoubleArray, toList, toMap, toSet, toPair

等可用于将一个集合的类型更改为另一个集合的类型。

//将集合类型更改为int类型
fun changeArrayType(){
var uIntArray = UIntArray(5) { 2U }
var intArray = ()
intArray[0] = 0
print(()) // [1, 1, 1, 1, 1]
print(()) // [0, 1, 1, 1, 1]
}

如上,我们通过toIntArray()创建一个新集合,新集合中的更改不会更改旧集合。但是如果你想要改动新集合时,旧集合也同时跟着修改。可以使用as而不是to。例如:

  • asIntArray, asLongArray, asShortArray, asByteArray, asList

fun asArrayType(){
var uIntArray = UIntArray(5) { 1U }
var intArray = ()
intArray[0] = 0
print(()) // [0, 1, 1, 1, 1]
print(()) // [0, 1, 1, 1, 1]
}

associateBy使用某个键(key)关联数据

如果您有一个数据列表,并且希望在数据元素中的某个键(key)关联数据,那么可以使用associateBy。

//使用某个键关联数据
fun keyWithData(){
data class Contact(val name: String, val phoneNumber: String)

val contactList = listOf(
Contact(“张三”, “+86130xxxx1111”),
Contact(“李四”, “+86130xxxx2222”),
Contact(“王五”, “+86130xxxx3333”),
Contact(“赵六”, “+86130xxxx4444”)
)

//key是phoneNumber,value是Contact。
val phoneNumberToContactMap = { }
println(phoneNumberToContactMap)
/*
{
+86130xxxx1111=Contact(name=张三, phoneNumber=+86130xxxx1111),
+86130xxxx2222=Contact(name=李四, phoneNumber=+86130xxxx2222),
+86130xxxx3333=Contact(name=王五, phoneNumber=+86130xxxx3333),
+86130xxxx4444=Contact(name=赵六, phoneNumber=+86130xxxx4444)
}
*/

//key是phoneNumber,value是name。
val phoneNumberToContactNameMap = ({}, {})
println(phoneNumberToContactNameMap)
/*
{
+86130xxxx1111=张三,
+86130xxxx2222=李四,
+86130xxxx3333=王五,
+86130xxxx4444=赵六
}
*/
}

distinct函数获取集合中唯一元素的列表

//在集合中找到不同的元素
fun findDistinctItem(){
val list = listOf(1, 2, 2, 3, 3, 3, 4, 4, 4, 4)
println(()) // [1, 2, 3, 4]
}

union函数集合合集

使用union函数获取两个集合的唯一元素。两个集合的元素顺序将保持不变,但第二个集合的元素将添加到第一个集合的元素之后。

fun unitonCollections(){
val listOne = listOf(2, 3, 3, 4, 5, 6)
val listTwo = listOf(1,2, 2, 4, 5, 6, 7, 8)
println((listTwo)) // [2, 3, 4, 5, 6, 1, 7, 8]
}

intersect函数集合交集

要获取两个集合中的公共元素,可以使用intersect函数,该函数返回包含两个集合的公共元素的集合。

fun intersectCollections(){
val listOne = listOf(2, 3, 3, 4, 5, 6)
val listTwo = listOf(1,2, 2, 4, 5, 6, 7, 8)
println((listTwo)) // [2, 4, 5, 6]
}

retainAll、removeAll保留与删除指定元素

如果在集合中,您希望只保留指定的元素,则可以使用retainAll函数。因为这个函数会修改列表,所以要确保列表或数组是可变的。

如果从集合中删除了任何元素,retainAll将返回true,否则将返回false。

//只保留指定的元素
fun retainAllTest(){
val listOne = mutableListOf(1, 2, 3, 3, 3, 4, 5, 6, 8, 9)//元数据源
val listTwo = listOf(1, 3, 4, 5, 6, 8)//保留指定元素
println((listTwo)) // true
println(listOne) // [1, 3, 3, 3, 4, 5, 6, 8]
}

类似地,您可以使用removeAll来删除一个集合中存在于另一个集合中的所有元素。

//删除指定的元素
fun removeAllTest(){
val listOne = mutableListOf(1, 2, 3, 3, 3, 4, 5, 6, 8, 9)//元数据源
val listTwo = listOf(1, 3, 4, 5, 6, 8)//删除指定元素
println((listTwo)) // true
println(listOne) // [2, 9]
}

filter根据某些条件筛选集合

fun filterCollection(){
//可以使用筛选器根据特定条件筛选集合。这将返回一个包含满足给定条件的元素的列表。
val list = listOf(1, 2, 3, 4, 5, 6, 7, 8)
val filteredList = { it % 2 == 0 }
println(filteredList) // [2, 4, 6, 8]

//如果想在某个集合中存储过滤过的元素,那么你可以使用filterIndexedTo:
val filterIndexedToList = mutableListOf()
(filterIndexedToList) { index, i -> list[index] % 2 == 0 }
println(filterIndexedToList) // [2, 4, 6, 8]

//如果想在集合中找到指定类型的实例元素可以使用filterIsInstance。
val mixedList = listOf(1, 2, 3, “one”, “two”, 4, “three”, “four”, 5, 6, “five”, 7)
val strList = ()
val intList = ()
println(strList) // [one, two, three, four, five]
println(intList) // [1, 2, 3, 4, 5, 6, 7]
}

zip集合函数

fun zipCollections(){
val listOne = listOf(1,2,3,4,5)
val listTwo = listOf(“a”,“b”,“c”,“d”,“e”,“f”)
//Zip返回一对列表。pair的第一个元素将从第一个集合中获取,pair的第二个元素将从第二个集合中获取。返回列表的大小将等于最短集合的大小。
println(listOne zip listTwo)//[(1, a), (2, b), (3, c), (4, d), (5, e)]

//zipWithNext返回对列表。对中的元素将是集合中相邻的元素。
print(()) // [(1, 2), (2, 3), (3, 4), (4, 5)]
}

unzip集合函数

Unzip返回一对列表。第一个列表由每对中的第一个元素组成,第二个列表由每对中的第二个元素组成。

学习分享,共勉

Android高级架构师进阶之路

题外话,我在阿里工作多年,深知技术改革和创新的方向,Android开发以其美观、快速、高效、开放等优势迅速俘获人心,但很多Android兴趣爱好者所需的进阶学习资料确实不太系统,完整。今天我把我搜集和整理的这份学习资料分享给有需要的人,若有关Android学习进阶可以与我在Android终极开发交流群一起讨论交流。 点击这里前往我的Git领取资料 的同时,还可以加入一个好的学习交流圈,何乐而不为呢?加入我们和我们一起吧!!

  • Android进阶知识体系学习脑图

  • Android进阶高级工程师学习全套手册

  • 对标Android阿里P7,年薪50w+学习视频

  • 大厂内部Android高频面试题,以及面试经历

阶知识体系学习脑图**

[外链图片转存中…(img-Yf8ik7gG-1645107547878)]

  • Android进阶高级工程师学习全套手册

[外链图片转存中…(img-V0FGbyTO-1645107547880)]

  • 对标Android阿里P7,年薪50w+学习视频

[外链图片转存中…(img-MVtvrJCV-1645107547880)]

  • 大厂内部Android高频面试题,以及面试经历