Kotlin系列九----解构声明、集合

一、解构函数介绍

      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&nbsp;
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() 每次迭代的步长

今天的学习就到这吧,希望能有所帮助,准备睡觉喽!


猜你喜欢

转载自blog.csdn.net/alexwll/article/details/79692082