Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

第 27 章 从 Java 到 Kotlin

目录

27.1. 数据类型与数据结构
27.1.1. 循环
27.1.2. 字符串
27.1.3. 日期时间
27.1.4. 数组
27.1.5. List 列表
27.1.6. Map 图
27.2. Class
27.3. Callback 回调
27.3.1. Consumer
27.4. 界面操作
27.4.1. findViewById
27.4.2. runOnUiThread
27.4.3. Fragment
27.4.4. ImageView
27.5. Thread
27.5.1. Handler
27.6. 定时与延迟执行
27.6.1. Timer
27.7. 协程
27.7.1. GlobalScope
27.7.2. lifecycleScope
27.7.3. viewModelScope

27.1. 数据类型与数据结构

27.1.1. 循环

			
for (x in 1..5) {
    print(x)
}			
			
			
			
for (x in 1..10 step 2) {
    print(x)
}
println()
for (x in 9 downTo 0 step 3) {
    print(x)
}			
			
			

27.1.2. 字符串

27.1.2.1. 字符串转数字

				
"1".toInt()			
				
				

27.1.3. 日期时间

			
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val formattedDate = dateFormat.format(Date())			
			
			

27.1.4. 数组

			
val arr = arrayOf(
    "13113668890", "111222445", "14566677",
    "20034534535", "21398989"
)			
			
			

27.1.5. List 列表

27.1.5.1. init

				
        val PATTERN: MutableList<String> = object : ArrayList<String>() {
            init {
                add(".*(?:发言|说话)人(\\d+).*")
                add(".*(?:发言|说话)人(一|二|三|四|五|六|七|八|九|十).*")
                add(".*(?:发言|说话)人(一|二|三|四|五|六|七|八|九|十).*")
                //            add("(.*)的观点.*");
            }
        }
				
				

27.1.5.2. ArrayList

				
val arrayList = ArrayList<String>()
arrayList.add("Java")
arrayList.add("Kotlin")
arrayList.add("Python")
println("ArrayList: $arrayList")				
				
				

27.1.5.3. List.of

				
listOf("debug", "dev").contains(BuildConfig.BUILD_TYPE)			
				
				

27.1.5.4. 列表转数组

				
val contact =
            mapOf(
                "BG7NYT" to "177",
                "BG7NEG" to "172",
                "BG7JWV" to "179",
                "BI7XYS" to "190",
                "BD7KBF" to "4612194"
            )

contact.values.toTypedArray()
				
				

27.1.5.5. MutableList 可变列表集合

				
   // 创建可变列表集合
    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()				
				
				

筛选并删除元素

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

				
				

27.1.5.6. forEach

				
var content = meetingDao.findByTaskId(meetingData.taskId).forEach { (id, taskId, time, speaker, sentence) ->
                Log.d(TAG, sentence)
            }				
				
				

27.1.5.7. 列表拼接字符串

				
var content = meetingDao.findByTaskId("5b4a5bd92da847d292ed74ae696a7ca1").map({ "${it.time} 发言人${it.speaker} ${it.sentence}" }).joinToString(separator = "\n")
Log.d(TAG, content)				
				
				

27.1.6. Map 图

27.1.6.1. init

				
        val digit: MutableMap<String?, String?> = object : HashMap<String?, String?>() {
            init {
                put("一", "1")
                put("二", "2")
                put("三", "3")
                put("四", "4")
                put("五", "5")
                put("六", "6")
                put("七", "7")
                put("八", "8")
                put("九", "9")
                put("十", "10")
                put("零", "0")
            }
        }				
				
				

27.1.6.2. Map.of

				
 mapOf("content" to "hello world")
				
				

27.1.6.3. 反转 Map 的 key 与 value

				
 val originalMap = mapOf("a" to 1, "b" to 2, "c" to 2)

// 反转键值对(注意:如果值有重复,会导致键冲突,后面的键会覆盖前面的)
val reversedMap = originalMap.associateBy({ it.value }, { it.key })

println(reversedMap) // 输出: {1=a, 2=c}(值2对应的原键"b"被覆盖)
				
				
				
ConcurrentHashMap<String, String> speakers = new ConcurrentHashMap<>();
        speakers.put("1", "发言人一");
        speakers.put("2", "市场部小周");
        speakers.put("4", "陈先生");
        speakers.put("5", "齐天大圣");
        speakers.put("6", "一品轩小飞");
        speakers.put("7", "年年富");
        speakers.put("8", "李总");		
val invertedMap: Map<String, String> = speakers.entries.associateBy({ it.value as String }, { it.key as String })