Android面试题之Kotlin常见集合操作技巧

本文首发于公众号"AntDream",欢迎微信搜索"AntDream"或扫描文章底部二维码关注,和我一起每天进步一点点

list

创建和修改

不可变list,listOf

go 复制代码
var list = listOf("a","d","f")
println(list.getOrElse(3){"Unknown"})
println(list.getOrNull(3) ?: "Unknown")

创建和修改可变list,mutableList

ini 复制代码
val mutableList = mutableListOf("a","d","f")
mutableList.removeIf { it.contains("a") }

遍历和解构

forIn,forEach,forEachIndexed

用下划线_来跳过不需要的元素

scss 复制代码
for (s in list){
    println(s)
}

list.forEach{
    println(it)
}

list.forEachIndexed { index, item ->
    println("$index, $item")
}
//解构
val(a,_,c) = list 

"_"表示跳过这个元素,跳过的元素不会被读取

转换

scss 复制代码
list.toMutableList()

去重

scss 复制代码
list.distinct()

快速筛选和排序

可以结合filter、forEach、sortedByDescending、sortedBy来快速对一个list进行筛选和排序

scss 复制代码
val resultList = mutableListOf<AppInfo>()
val recommendations = listOf(AppA(), AppB(), AppC())
//根据app的安装时间按照倒序排列
recommendations.filter { 
    //filter里跟筛选的条件,符合条件的数据会继续走后面的排序
    it.isAppInstalled() 
}  
.sortedByDescending { 
     //这里是排序的条件,sortedBy是正序
    it.getAppInstalledTime() 
}.forEach { resultList.add(it) }

set

不可重复的,去重里面的元素,函数操作基本同list

map

go 复制代码
fun main() {
    val map = mapOf("Jack" to 20, "Jim" to 18)
    mapOf(Pair("Jim",20), Pair("json",30))
    println(map["Jack"])
    println(map.getValue("Jack"))
    println(map.getOrElse("java"){"unknown"})
    println(map.getOrDefault("java", 0))

    map.forEach{
        println("${it.key}, ${it.value}")
    }

    val mutableMap = mutableMapOf("Jack" to 20, "Jim" to 18)
    //添加元素
    mutableMap += "jim" to 30
    mutableMap["jim"] = 31
    mutableMap.getOrPut("role"){19}
    println(mutableMap)
}

to,实际上是一个函数,返回一个Pair结果

去重

php 复制代码
val clone = filteredDirectories.clone() as ArrayList<Directory>
//数据去重。
callback(clone.distinctBy { it.path.getDistinctPath() } as ArrayList<Directory>)

欢迎关注我的公众号查看更多精彩文章!

相关推荐
Java水解19 分钟前
20个高级Java开发面试题及答案!
spring boot·后端·面试
河铃旅鹿1 小时前
Android开发-java版:SQLite数据库
android·数据库·笔记·学习·sqlite
旋律逍遥1 小时前
《Framework 开发》3、开发工具及命令行知识装备
android
啦啦9117141 小时前
安卓手机/平板/TV版 Rotation强制横屏显示工具!免ROOT可用!再推荐突破手机限制的3款神器
android·智能手机·电脑
一直在努力的小宁2 小时前
《代码随想录-精华内容提取》07 二叉树
数据结构·算法·链表·面试
汤面不加鱼丸2 小时前
flutter实践:混合app在部分android旧机型上显示异常
android·flutter
世洋Blog2 小时前
Unity面经-List底层原理、如何基于数组、如何扩容、List存储泛型、List有关在内存中的结构
unity·面试·c#·list
_李小白4 小时前
【Android FrameWork】延伸阅读:ActivityManagerService启动Activity
android
吃饺子不吃馅4 小时前
面试过别人后,我对面试祛魅了
前端·面试·github
用户41659673693554 小时前
Android 媒体库高效扫描器:基于协程与 `ContentObserver` 的 `FileScanner`
android