一、解构函数介绍
kotlin的学习总结也拖延了很久,今天继续学习解构声明和集合,本文比较简单多是方法和使用的介绍,下面开始吧,我们在Java中若创建一个类和几个属性,代码如下:
public class Person { private String name; private int age; private String sex; public Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } }
创建Person的对象:
Person person = newPerson(“A”,20,“man”);
上述的代码在Kotlin中如何实现呢?
//声明一个数据类,使用data修饰 data class JieGou(var name:String,var age : Int){ } 创建对象时,相当于声明了两个变量,并对应赋值 var (name,age) = Run.JieGou("A",20)
创建一个数据类,此时在创建对象时并赋值,此时不仅创建了JieGou的对象还声明了name、age这两个变量,一个解构声明同时创建多个变量。,并且可以独立使用它们,这样的语法称为解构函数
二、解构函数的使用
- 解构函数创建对象时,同时创建了每个属性的对象,且可直接使用:
创建对象时,相当于声明了两个变量,并对应赋值 var (name,age) = Run.JieGou("A",20) Log.e("$name-----", "$age")
- 当有特殊时刻只需要使用某个属性,而不需声明多余的变量时,只需用下划线代替:
当你不需要某个值时可以使用_(下划线)代替 var (_,age) = Run.JieGou("A",20)
-
解构声明在map集合中也被应用,所以在遍历map集合时可以:
此时的key,value 就对应map中的键值对 for ((key,value) in map){ Log.e("$key-----", "$value") }
三、集合
kotlin中的集合分为:可变集合和不可变集合(lists、sets、maps 等)
1、List:List<out T> 类型是一个提供只读操作如 size、get等的接口(只读)
var readList : List<Int> = listOf(1,2) readList.size readList.get(index = 0)
- MutableList<T> 可写入可改变的集合,操作如 set等接口(可读、可写)
var writeList : MutableList<Int> = mutableListOf(1,2) writeList.size writeList.get(index = 0) writeList.add(3)
2、Set:setOf()类型是一个提供只读操作如 size(只读)
var readSet : Set<String> = setOf("A","B") readSet.size
- mutableSetOf ()可写入可改变的集合,操作如 set等接口(可读、可写)
var writeSet : MutableSet<String> = mutableSetOf("C","D") writeSet.size writeSet.add("ER")
- 当对于可写入的集合提供外部查看接口,又不允许外部接口随意修改时,可采用:
var writeSet : MutableSet<String> = mutableSetOf("C","D") val read : Set<String> get() = writeSet.toSet()
3、 list 和 set其它扩展方法:
readList.none() //集合为空时返回true readList.none { it == "B" } // 集合没有元素符合此条件时返回true readList.single() // 判断集合是否为单一元素 返回单一元素或异常 readList.first() 返回 第一个元素 (当只有一个元素时会报错 下同) readList.first { it == "B" } 返回第一个符合条件的元素 readList.last() 返回最后一个元素 readList.last { it == "B" } 最后一个符合条件的元素 找不到返回异常 readList.findLast { it == "B" } 返回最后一个符合条件的元素 找不到返回null readList.component1() 返回 第一个元素 readList.elementAt(0) 按下表查找元素 越界返回异常 readList.elementAtOrElse(6, { "SSS" }) 按下表查找元素 越界返回设置的默认值 readList.subList(1, 3).toString() 按下表截取集合的一段值
四、区间
Kotlin中区间使用 .. 表示
- (1.. 5)表示从1到5之间,区间会从1自动叠加到5,可使用step 控制每次增加的步长:
for (i in 1..5){ Log.e("-----", "$i==") //输出 1,2,3,4,5 } for (i in 1..5 step 3){ Log.e("-----", "$i==") //输出 1,4, }
- 区间不能自动倒序,若想要实现倒序功能要使用downto
for (i in 5 downTo 1){ Log.e("-----", "$i==") }
- until :使用until修饰的区间左闭又开,即【a,b)
for (i in 1 until 5){ Log.e("-----", "$i==") //输出结果: 1,2,3,4 }
- 区间函数:rangeTo() 产生一个数据区间 参数: 区间的结束值
var int :Int = 10 int.rangeTo(20) 获得一个10~20的数据区间( 相当与 10..20 ) for (i in int.rangeTo(20) step 2){ Log.e("-----", "$i==") }
- downTO() 从开始数据递减下去
- step() 每次迭代的步长
今天的学习就到这吧,希望能有所帮助,准备睡觉喽!