Kotlin学习-基础知识点
一:基礎要點
//常量定義 val
val arg_a1: Int = 1 ?
//變量定義var
var arg_a2 = 5? // 系統自動推斷變量類型為Int
備注:kotlin 定義變量必須給定初始值,如延遲初始值,需要特殊聲明!
空對象處理
//可null對象聲明
?
//顯示判斷處理val l: Int = if (b != null) b.length else -1val b: String? = "Kotlin"if (b != null && b.length > 0) {print("String of length ${b.length}")} else {print("Empty string")}//安全處理符處理 //the safe call operator, written ?.val lt = b?.length ?: -1//為空為-1val files = File("Test").listFiles()println(files?.size ?:"empty")?
?
類型判斷及轉化
//類型判斷,如果為String類型,則自動轉為String
if (obj is String) {
??? print(obj.length)
}
// 非此類型判斷,same as !(obj is String)
if (obj !is String) {
??? print("Not a String")
}
//可null類型轉化
val x: String? = y as String?
//非null轉化
//null cannot be cast to String as this type is not nullable,
val x2: String = y as String
?
equels與引用比較:
兩個對象內容比較(Java中的equels)==兩個等號代表
兩個引用比較使用===三個等號代表
Equality checks: a == b??? ,!==
Referential equality: a === b
?
this關鍵字引用含義
class A { // implicit label @Ainner class B { // implicit label @Bfun Int.foo() { // implicit label @fooval a = this@A // A's thisval b = this@B // B's thisval c = this // foo()'s receiver, an Intval c1 = this@foo // foo()'s receiver, an Intval funLit = lambda@ fun String.() {val d = this // funLit's receiver}val funLit2 = { s: String ->// foo()'s receiver, since enclosing lambda expression// doesn't have any receiverval d1 = this}}} }?說明:
1,this默認不加標簽,如在類的成員內,標識當前類對象,在成員函數或擴展函數內部則this代表的是接受者類型對象(如變量c,c1代表作用對象Int)
2,this加上@對應類名稱代表指定類對象引用,如a,b
?
?
函數定義
//返回值函數
fun sum(a: Int, b: Int): Int {
??? return a+b
}
//無返回值
fun getHello(){
??????? //......
?}
//不定參數定義函數
fun varsFor(vararg v:Int){//變長參數 vararg
??? for(vt in v){
??????? print(vt)
??? }
}
?//函數返回可null類型
fun getStringLength(obj: Any): Int? {
??? // `obj` 的類型會被自動轉換為 `String`
??? if (obj is String && obj.length > 0)
??????? return obj.length
??? return null // 這里的obj仍然是Any類型
}
?
//函數作為參數傳遞
fun testHandleMethodParams(){val strSample = "handle filter"val tvalue = transformResult (strSample){//函數作為參數getParams(strSample)}}fun getParams(str1: String): Int = str1.length/*** arg0 為實參* p1 為形參,內部無法引用* ->函數返回值*/fun <T, R> transformResult(args:T,transform: (T) -> R): R {return transform(args)}?
/*** 此方法接收一個無參數的函數并且無返回,Unit表示無返回*/private fun getResults(method: () -> Unit) {method()}?
?
數組類型
//默認值初始化 [1,2,3]
?val a = arrayOf(1, 2, 3)
//表達式初始化
?val b = Array(3, { i -> (i * 2) })
//指定元素個數,空元素數組初始化
?var attr = arrayOfNulls<String>(5)
?attr[1] = "11"
?attr[2] = "22"
數組遍歷
fun vForArray(array: Array<Int>){
??? //withIndex 函數 index value 一對同時遍歷
??? for ((index, value) in array.withIndex()) {
??????? println("the element at $index is $value")
??? }
??? //索引遍歷
??? for (i in array.indices) {
??????? print(array[i])
??? }
??? //值遍歷
??? for(v in array){
??????? print("$v \t")
??? }
}
?
集合類型 分為可變和不可變集合
1,集合類型包含三種類型:它們分別是:List、Set、Map
2,三種集合類型分別對應MutableList<E>、MutableSet<E>、MutableMap<K,V>接口
??? //List 創建
??? val list1 = listOf(1,2,"3",true) // 不定類型創建
??? val list2 = listOf<String>("1","2","3")? // 確定元素類型
??? val list3 = listOf(a)// 使用數組創建
??? //備注:List一旦創建不可修改,add set remove不可操作
?? ?
??? //mutableList 創建
??? val mutaList1 = mutableListOf<String>("1","2","3")
??? val mutaList2 = mutableListOf(a)
??? mutaList1.add("11")
??? mutaList1.removeAt(2)
??? mutaList1.set(0,"mm")
?
集合常用函數
?
fun listOperate(){val items = listOf(1, 2, 3, 4)items.first() //== 1items.last() //== 4val subItems = items.filter { it % 2 == 0 } // returns [2, 4]var sub2 = items.slice(1..3)var sub3 =items.filterNot { it>100 }//高階函數//遍歷listitems.forEach{ // it= it*2+1print(it)}items.forEachIndexed { index, value -> if (value > 8) println("value of index $index is $value") }//T->R 集合中的元素通過某個方法轉換后的結果存到一個集合val list11 = items.map { (it - 2+1).toLong() }val list111 = items.mapIndexed { index, it -> if(index>5) 10 * it }//合并兩個集合 // items.flatMap { listOf(it, it + 1) }// map:遍歷每一個元素 // flatMap:遍歷每一個元素,并鋪平(展開內部嵌套結構)元素var list_map = listOf(listOf(10,20),listOf(30,40),listOf(50,60))var mapList = list_map.map{ element -> element.toString() }var flatMapList = list_map.flatMap{ element -> element.asIterable() } // map [[10, 20], [30, 40], [50, 60]] // flatmap [10, 20, 30, 40, 50, 60]// filter all 符合條件elementval list12 = items.filter { mypre(it) }//filter 到第一個不符合條件元素返回,后面不再過濾val list13 = items.takeWhile { (it%2!=0) }//提取前3個元素val list14 = items.take(3)//提取后3個val list15 = items.takeLast(3)//去除重復元素var list16 = items.distinct()//指定key過濾條件var list17 = items.distinctBy { it*101+100 } // list1.fold(5,operation = )//匹配交集元素var list18 = items.intersect(listOf<Int>(2,3,4))//匹配兩個集合內所以不同元素,差集合var list19 = items.union(listOf<Int>(2,3,4))//返回匹配條件元素var list21 = items.any { (it in 10..20) }var list22 = items.count { it >20 }//初始值,累計計算處理var list23 = items.fold(10) { total, next -> total + next }var list24 =items.reduce { total, next -> total - next }var sumFilterResult : Int = 0items.filter { it < 7 }.forEach { sumFilterResult += it }val rwList = mutableListOf(1, 2, 3)// 去除null元素rwList.requireNoNulls() //returns [1, 2, 3]//檢測list內有符合條件元素if (rwList.none { it > 6 }) println("No items above 6") // prints "No items above 6"//第一個元素,或為空對象val item = rwList.firstOrNull()}fun mypre(t:Int): Boolean{
??? return t%2==0
}
?
轉載于:https://www.cnblogs.com/happyxiaoyu02/p/9953689.html
總結
以上是生活随笔為你收集整理的Kotlin学习-基础知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7+centos7.2双系统安装
- 下一篇: 【Visual Studio 扩展工具】