kotlin集合操作总结(list集合|mutablelist集合|list集合遍历|set集合|mutableset集合|map集合|可变map集合)(代码片段)

韩曙亮 韩曙亮     2023-03-28     826

关键词:

文章目录





一、List 创建与元素获取



Kotlin 中的集合分为两类 , 只读集合可变集合 ;


调用 listOf 函数 , 可以 直接创建 List 集合 ;
通过 [] 下标可以 直接获取 List 集合中的元素 ;

fun main() 
    val list = listOf("Tom", "Jerry")
    println("$list[0]")

上述代码执行结果 :

Tom




二、安全获取集合元素



除了使用 [] 下标获取 List 集合元素外 , Kotlin 还提供了 安全获取集合元素的 方法 : getOrElsegetOrNull 函数 ;


1、getOrElse 函数


List<T>.getOrElse(index: Int, defaultValue: (Int) -> T): T 函数原型 :

/**
 * 返回给定[index]处的元素,如果[index]不在列表范围内,则返回调用[defaultValue]函数的结果。
 */
@kotlin.internal.InlineOnly
public inline fun <T> List<T>.getOrElse(index: Int, defaultValue: (Int) -> T): T 
    return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index)

参数分析 : 在该函数中 , 传入了两个参数 , 第一个参数是元素的索引 , 第二个参数是一个 Lambda 表达式 ; 该 Lambda 表达式的 Int 类型参数就是 index: Int 参数 ;

返回值分析 : 返回给定[index]处的元素,如果[index]不在列表范围内,则 返回调用[defaultValue]函数的结果。


2、getOrNull函数


List<T>.getOrNull(index: Int): T? 函数原型 :

/**
 * 返回给定[index]处的元素,如果[index]不在列表范围内,则返回' null '。
 */
public fun <T> List<T>.getOrNull(index: Int): T? 
    return if (index >= 0 && index <= lastIndex) get(index) else null

参数分析 : 在该函数中 , 传入函数索引参数 ;

返回值分析 : 返回给定[index]处的元素,如果[index]不在列表范围内,则返回’ null '。





三、List 创建与元素获取代码示例



代码示例 :

fun main() 
    var list = listOf("Tom", "Jerry")
    println("$list[0]")

    println(list.getOrElse(2, "UnKnown"))
    println(list.getOrNull(3))

执行结果 :

Tom
UnKnown
null





四、MutableList 可变列表集合



使用 listOf 函数 创建的 List 集合 只读列表集合 ;

使用 mutableListOf 函数 创建的 MutableList 集合可变列表集合 ;


调用 MutableList#toList 函数 , 可以 将 可变列表集合 转为 只读列表集合 ;

调用 List#toMutableList 函数 , 可以 将 只读列表集合 转为 可变列表集合 ;


代码示例 :

fun main() 
    // 创建可变列表集合
    var mutableList = mutableListOf("Tom", "Jerry")
    // 添加元素
    mutableList.add("Jack")
    // 删除元素
    mutableList.remove("Tom")
    println(mutableList)

    // 将 可变列表集合 转为 只读列表集合
    val list: List<String> = mutableList.toList()
    // 将 只读列表集合 转为 可变列表集合
    val mutable: MutableList<String> = list.toMutableList()

执行结果 :

[Jerry, Jack]




五、修改 MutableList 集合的 mutator 函数



修改 MutableList 集合 的 函数 统称为 mutator 函数 ;


1、添加元素运算符 += 和 删除元素运算符 -=


运算符重载 : MutableList 集合 还有一些 运算符重载 , 添加元素运算符 +=删除元素运算符 -= ;

  • 向 MutableList 集合 中添加一些元素 , 可使用 += 运算符 :
mutableList += "Jack"

其效果等同于

mutableList.add("Jack")
  • 从 MutableList 集合 中删除一些元素 , 可使用 -= 运算符 :
mutableList -= "Tom"

其效果等同于

mutableList.remove("Tom")

2、通过 Lambda 表达式筛选要删除的元素


通过 Lambda 表达式筛选要删除的元素 : Lambda 表达式返回 boolean 值 , 如果返回 true , 则删除该元素 , 返回 false 则不处理该元素 ;

fun main() 
    // 创建可变列表集合
    val mutableList = mutableListOf("Tom", "Jerry")
    // 通过 Lambda 表达式筛选要操作的元素
    // 删除包含 字母 T 的元素
    mutableList.removeIf 
        it.contains("T")
    
    println(mutableList)

执行结果 :

[Jerry]




六、List 集合遍历



List 集合遍历 :

  • for in 循环遍历 :
    // 使用 for in 循环遍历
    for (name in list) 
        println("for : $name")
    
  • forEach 遍历 :
/**
 * 在每个元素上执行给定的[action]。
 */
@kotlin.internal.HidesMembers
public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit 
    for (element in this) action(element)

  • forEachIndexed 遍历并同时获取索引值 :
/**
 * 在每个元素上执行给定的[action],提供元素的顺序索引。
 * @param [action]函数,它接受元素的索引和元素本身
 * 并对元素执行所需的操作。
 */
public inline fun <T> Iterable<T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit 
    var index = 0
    for (item in this) action(checkIndexOverflow(index++), item)


代码示例 :

fun main() 
    // 创建可变列表集合
    val list = listOf("Tom", "Jerry", "Jack")

    // 使用 for in 循环遍历
    for (name in list) 
        println("for : $name")
    

    // 使用 forEach 遍历
    list.forEach 
        println("forEach : $it")
    

    // 遍历时获取索引位置
    list.forEachIndexed  index, s ->
        println("$index : $s")
    

执行结果 :

for : Tom
for : Jerry
for : Jack
forEach : Tom
forEach : Jerry
forEach : Jack
0 : Tom
1 : Jerry
2 : Jack




七、List 通过解构一次性给多个元素赋值



List 通过解构一次性给多个元素赋值 :

fun main() 
    // 创建可变列表集合
    val list = listOf("Tom", "Jerry", "Jack")

    // 使用 list 集合一次性给 3 个元素赋值
    val (name1, name2, name3) = list

    println("name1 = $name1")
    println("name2 = $name2")
    println("name3 = $name3")

执行结果 :

name1 = Tom
name2 = Jerry
name3 = Jack

如果集合中有 3 个元素 , 但是只需要给 2 个元素赋值 , 这里可使用 _ 跳过某个元素的赋值 ;

代码示例 :

fun main() 
    // 创建可变列表集合
    val list = listOf("Tom", "Jerry", "Jack")

    // 使用 list 集合一次性给 2 个元素赋值, 第 1 个元素跳过
    val (name1, _, name3) = list

    println("name1 = $name1")
    println("name3 = $name3")

执行结果 :

name1 = Tom
name3 = Jack




八、Set 集合



List 集合中的元素是 可以重复 的 , Set 集合中的元素 不可重复 ;

调用 setOf 函数 , 可以创建 Set 集合 ;

调用 Set#elementAt 函数 , 可以 读取 Set 集合中的元素 ;


代码示例 :

fun main() 
    val set = setOf("Tom", "Jerry", "Jack")
    println(set.elementAt(1))

执行结果 :

Jerry




九、可变 Set 集合



调用 mutableSetOf 函数 , 可以创建 可变 Set 集合 ;

可变 Set 集合 , 可以

  • 使用 += 运算符 添加元素 ,
  • 使用 -= 运算符删除元素 ;

代码示例 :

fun main() 
    val mutableSet = mutableSetOf("Tom", "Jerry", "Jack")
    mutableSet += "Bill"
    mutableSet -= "Jerry"

    println(mutableSet)
    println(mutableSet.elementAt(2))

执行结果 :

[Tom, Jack, Bill]
Bill




十、List 与 Set 之间相互转换



调用 List#toSet() 函数 , 可以将 List 集合转为 Set 集合 , 转换过程中会 自动删除重复的元素 ;

调用 List#distinct() 函数 , 可以去除重复元素 ;

调用 Set#toList() 函数 , 可以将 Set 集合转为 List 集合 ;


代码示例 :

fun main() 
    val list = listOf("Tom", "Jerry", "Jack", "Tom", "Jerry", "Jack")
    println(list)
    println(list.distinct())

    val list2 = listOf("Tom", "Jerry", "Jack", "Tom", "Jerry", "Jack")
    val set = list2.toSet()
    println(set)

执行结果 :

[Tom, Jerry, Jack, Tom, Jerry, Jack]
[Tom, Jerry, Jack]
[Tom, Jerry, Jack]




十一、数组类型



数组类型 :

  • Int 类型数组 : IntArray 数组类型 , 使用 intArrayOf 函数创建 ;
  • Double 类型数组 : DoubleArray 数组类型 , 使用 doubleArrayOf 函数创建 ;
  • Long 类型数组 : LongArray 数组类型 , 使用 longArrayOf 函数创建 ;
  • Short 类型数组 : ShortArray 数组类型 , 使用 shortArrayOf 函数创建 ;
  • Byte 类型数组 : ByteArray 数组类型 , 使用 byteArrayOf 函数创建 ;
  • Float 类型数组 : FloatArray 数组类型 , 使用 floatArrayOf 函数创建 ;
  • Boolean 类型数组 : BooleanArray 数组类型 , 使用 booleanArrayOf 函数创建 ;
  • 普通对象类型数组 : Array 数组类型 , 使用 arrayOf 函数创建 ;

代码示例 :

fun main() 
    var intArray = intArrayOf(0, 1, 2, 3)
    var doubleArray = doubleArrayOf(0.1, 0.2, 0.3)
    var longArray = longArrayOf(0, 1, 2, 3)
    var shortArray = shortArrayOf(0, 1, 2, 3)





十二、Map 集合



调用 mapOf 函数 创建 Map 集合 , 键值对 元素有两种初始化方式 :

  • 使用 to 函数进行初始化 : 在参数中使用 键 to 值 的方式进行初始化 ;
  • 使用 Pair 对象进行初始化 : 传入 Pair(键, 值) 进行初始化 ;

to 函数原型如下 , 其本质也是返回 Pair 类型的实例对象 ;

/**
 * 从this和[that]创建类型为[Pair]的元组。
 * 这对于创建噪音更少的[Map]字面量很有用,例如:
 * @sample samples.collections.Maps.Instantiation.mapFromPairs
 */
public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

代码示例 :

fun main() 
    val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)
    println(map)

    val map2 = mapOf(Pair("Tom", 18), Pair("Jerry", 12), Pair("Jack", 20))
    println(map2)

执行结果 :

Tom=18, Jerry=12, Jack=20
Tom=18, Jerry=12, Jack=20




十三、获取 Map 值



获取 Map 值 :

  • 使用 取值运算符 [] 获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null ;
  • 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常 ;
	public fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key)
  • 使用 Map#getOrElse 函数 , 获取 键 对应的 值 , 如果没有找到则返回 Lambda 表达式 参数 的返回值 ;
	public inline fun <K, V> Map<K, V>.getOrElse(
		key: K, 
		defaultValue: () -> V): V = get(key) ?: defaultValue()
  • 使用 Map#getOrDefault 函数 , 获取 键 对应的 值 , 如果没有找到则返回默认值 ;
    public fun getOrDefault(key: K, defaultValue: @UnsafeVariance V): V 
        // See default implementation in JDK sources
        throw NotImplementedError()
    

代码示例 :

fun main() 
    val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)
    println(map)

    val map2 = mapOf(Pair("Tom", 18), Pair("Jerry", 12), Pair("Jack", 20))
    println(map2)

    // 使用 取值运算符 `[]`  获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null
    println(map["Tom"])

    // 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常
    println(map.getValue("Tom"))

    // 使用 Map#getOrElse 函数 ,  获取 键 对应的 值 , 如果没有找到则返回 Lambda 表达式 参数 的返回值
    println(map.getOrElse("Tim", 20))

    // 使用 Map#getOrDefault 函数 , 获取 键 对应的 值 , 如果没有找到则返回默认值
    println(map.getOrDefault("Tim", 88))

执行结果 :

Tom=18, Jerry=12, Jack=20
Tom=18, Jerry=12, Jack=20
18
18
20
88




十四、Map 遍历



Map 遍历方式 :

  • forEach 函数 , 传入 Lambda 表达式参数 , 该 Lambda 表达式的参数为 Map.Entry<K, V> 类型 ;
public inline fun <K, V> Map<out K, V>.forEach(action: (Map.Entry<K, V>) -> Unit): Unit 
    for (element in this) action(element)

  • forEach 函数 , 传入 Lambda 表达式参数 , 该 Lambda 表达式的 两个参数为 实际的 键值对 的类型 ;
    default void forEach(BiConsumer<? super K, ? super V> action) 
        Objects.requireNonNull(action);
        for (Map.Entry<K, V> entry : entrySet()) 
            K k;
            V v;
            try 
                k = entry.getKey();
                v = entry.getValue();
   

kotlin集合操作①(list创建与元素获取|安全获取集合元素|getorelse|getornull)(代码片段)

...三、List创建与元素获取代码示例一、List创建与元素获取Kotlin中的集合分为两类,只读集合和可变集合;调用listOf函数,可以直接创建List集合;通过[]下标可以直接获取List集合中的元素;funmain()vallist=listOf("Tom", 查看详情

kotlin集合操作①(list创建与元素获取|安全获取集合元素|getorelse|getornull)(代码片段)

...三、List创建与元素获取代码示例一、List创建与元素获取Kotlin中的集合分为两类,只读集合和可变集合;调用listOf函数,可以直接创建List集合;通过[]下标可以直接获取List集合中的元素;funmain()vallist=listOf("Tom", 查看详情

kotlin集合操作③(list集合遍历|forin|foreach|foreachindexed|list通过解构一次性给多个元素赋值)(代码片段)

...")forEach遍历:/***在每个元素上执行给定的[action]。*/@kotlin.internal.HidesMemberspublicinline 查看详情

kotlin集合操作④(set集合|可变set集合|list与set之间相互转换|数组类型)(代码片段)

文章目录一、Set集合二、可变Set集合三、List与Set之间相互转换四、数组类型一、Set集合List集合中的元素是可以重复的,Set集合中的元素不可重复;调用setOf函数,可以创建Set集合;调用Set#elementAt函数,可以读取Set集合中的元素;代码示... 查看详情

kotlin常用collection集合操作整理

参考技术A本篇记录了Kotlin常用集合的相关操作,用以熟练使用Kotlin里的相关集合。集合接口与相关函数位于kotlin.collections包中。Kotlin标准库提供了基本集合类型的实现:Set、List以及Map。一对接口代表每种集合类型:其中灰色是... 查看详情

kotlin惰性集合操作-序列sequence(代码片段)

...中间和末端操作创建序列总结集合操作函数和序列在了解Kotlin惰性集合之前,先看一下Koltin标注库中的一些集合操作函数。定义一个数据模型Person和Book类:dataclassPerson(valname:String,valage:Int)dataclassBook(valtitle:String,valauthors:Li... 查看详情

kotlin集合操作④(set集合|可变set集合|list与set之间相互转换|数组类型)(代码片段)

文章目录一、Set集合二、可变Set集合三、List与Set之间相互转换四、数组类型一、Set集合List集合中的元素是可以重复的,Set集合中的元素不可重复;调用setOf函数,可以创建Set集合;调用Set#elementAt函数,可以读取Set集合中的元素;代码示... 查看详情

集合的一些操作总结

集合的特性:1.去重,2.无序,3.关系测试集合创建:set()方法,列表list()集合的关系测试:并集:list_1.union(list_2)or^交集:list_1.intersection(list_2)or|差集:list_1.difference(list_2)orlist_1-list_2对称差集:list_1.symmetric_difference(list_2)list_1^list2子集:list... 查看详情

kotlin集合list

参考技术A1kotlin集合分类可变集合不可变集合1.1创建不可变List1.2创建可变集合2.2使用for循环遍历List元素2.3使用函数withIndex()遍历List元素2.4使用forEach遍历List元素3常见的List元素操作函数3.1retainAll取两个集合交集:3.2contains(element:T):B... 查看详情

kotlin初学者集合(代码片段)

...介:CSDN博客专家、华为云享专家认证系列专栏:Kotlin初学者学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。目录一、集合二、List集合2.1创建只读List2.2创建可变List2.3List和MutableList相互转换2... 查看详情

kotlin集合操作②(mutablelist可变列表集合|修改mutablelist集合的mutator函数)

文章目录​​一、MutableList可变列表集合​​​​二、修改MutableList集合的mutator函数​​​​1、添加元素运算符+=和删除元素运算符-=​​​​2、通过Lambda表达式筛选要删除的元素​​一、MutableList可变列表集合使用listOf函数创... 查看详情

kotlin集合listsetmap操作汇总(代码片段)

一、list转成已逗号等分割的Stringvalnumbers=listOf("one","two","three","four")println(numbers.joinToString(separator="|",prefix="start:",postfix= 查看详情

kotlin集合操作②(mutablelist可变列表集合|修改mutablelist集合的mutator函数)(代码片段)

文章目录一、MutableList可变列表集合二、修改MutableList集合的mutator函数1、添加元素运算符+=和删除元素运算符-=2、通过Lambda表达式筛选要删除的元素一、MutableList可变列表集合使用listOf函数创建的List集合是只读列表集合;... 查看详情

groovy集合遍历(“*.“展开操作符|代码示例)(代码片段)

...oidmain(args)//为ArrayList设置初始值deflist=["Java","Kotlin","Groovy","Gradle"]//I."*."展开操作符//*.是展开操作符,deflist2=list*.toUpperCase();//打印原集合[Java,Kotlin,Groovy,Gradle]printlnlist//打印新集合[JAVA,KOTLIN,GROOVY,... 查看详情

groovy集合遍历(“*.“展开操作符|代码示例)(代码片段)

...oidmain(args)//为ArrayList设置初始值deflist=["Java","Kotlin","Groovy","Gradle"]//I."*."展开操作符//*.是展开操作符,deflist2=list*.toUpperCase();//打印原集合[Java,Kotlin,Groovy,Gradle]printlnlist//打印新集合[JAVA,KOTLIN,GROOVY,... 查看详情

初识kotlin之集合(代码片段)

Kotlin的集合是让我为之心动的地方,丰富的高阶函数帮助我们高效开发。今天介绍Kotlin的基础集合用法、获取集合元素的函数、过滤元素的函数、元素排序的函数、元素统计的函数、集合元素映射的函数、集合的交差并补集的函... 查看详情

cgbtn2111-day15总结复习

DAY15复习1.List接口1.1List接口的特点List集合是有下标的List集合是有顺序的List集合可以存放重复的数据1.2List集合方法总结单个集合间的操作voidadd(intindex,Eelement)在集合的指定下标index处插入指定元素elementEget(intindex)返回本集合中指... 查看详情

cgbtn2110-day15总结复习

DAY15复习1.List接口1.1List接口的特点List集合是有下标的List集合是有顺序的List集合可以存放重复的数据1.2List集合方法总结单个集合间的操作voidadd(intindex,Eelement)在集合的指定下标index处插入指定元素elementEget(intindex)返回本集合中指... 查看详情