Kotlin小节(二)

news2024/12/27 15:20:55

1、安全索引取值函数:getOrElse和getOrNull

getOrElse:如索引值存在,返回索引处数值;索引值不存在,返回lamada值

getOrNull:如索引值存在,返回索引处数值;索引值不存在,返回null

e.g.

    var numList = listOf(10,20,30)
    var num = numList.getOrElse(3) { "value not exist" }
    println(num)
    var data = numList.getOrNull(4) ?: 40
    println(data)

2、listof和mutableListof创建list的区别

列表只读和你在定义列表变量时选择val或var关键字无关。如果修改变量声明,把当前的val改为var,那么改变的不过是可以给变量重新赋值一个新列表,而列表自身依然是只读的。

listof创建的list不可变。不能增删改,只能读。

mutableListof创建的list是可变list,支持增删改读。

e.g.

    val list = mutableListOf(10,20,30)
    list.add(40)
    list.remove(20)
    list.add(0,22)
    list.removeAt(list.size-2)
    list[0] = 33
    //判断是否会越界
    list.add(3,55)//不越界
    list.add(4,66)//越界

3、mutator函数

修改list,增删改查函数

[ ],+=,+-,add,addAll,clear, removeIf

4、遍历集合:for循环、forEach循环、

for循环如下:

    val list:List<String> = listOf("flower","weed","tree")
   //遍历list集合
   for (value in list){
        println(value)
    }

forEach循环如下:

list.forEach { element -> println(element) }
forEachIndexed遍历元素同时输出索引值如下:
    list.forEachIndexed{index,element -> println("index:$index,value:$element")}
    list.forEachIndexed(action ={index,element -> println("index:$index,value:$element")})

4、从文件读取数据

    //从文件读入信息
    val menuList = File("data/info.txt").readText().split('\n')
    menuList.forEachIndexed { index, element -> println("index:$index, element:$element") }

info.txt,文件内容如下:

rose
paeony
flower

5、解构

同时定义多个变量type, name, price并赋值,如下:

val(type,num)= listOf("1","2","3")

过滤掉某个数值,用下划线”_“,如下:

val(type,_,num) = listOf("1","2","3","4")

6、break表达式

break可以立刻跳出任何的循环和条件表达式。不让程序继续执行循环内接下来的语句。立刻从break处跳出。

9、kotlin集合总结

10、also函数——防范竞态条件

11、主构造函数、次构造函数和init函数的执行顺序

主构造函数优先执行,init函数次之,次构造函数优先级最低。

类属性,init方法,主、次构造函数的执行顺序如下:
(1) 主构造函数里声明的属性(name:String,var age:Int)。
(2) 类级别的属性赋值( var name = "www".also { println("name:"+it) })。
(3) init初始化块里的属性赋值和函数调用(var age = 88、println函数)。
(4) 次构造函数里的属性赋值和函数调用(var career = "developer"、println函数)。
需要说明的是,init初始化块和类级别的属性赋值(的顺序取决于定义的先后。如果init初始化块定义在类级别的属性赋值之前,那么它就比类级别的属性赋值早一步初始化。

示例如下:

class TestMain (name:String,var age:Int){
    var name = "www".also { println("name:"+it) }
    init {
        var age = 88
        println("init#age:"+age)
    }

    var home = "town".also { println(println("home:"+it)) }

    constructor(name: String):this(name,age = 99){
        var career = "developer"
        println("constructor#career:"+career)
    }
}
fun main(args:Array<String>){
    println(TestMain("ppp").age)
}

输出结果如下:

name:www
init#age:88
home:town
kotlin.Unit
constructor#career:developer
99


12、懒惰初始化

一般把属性初始化操作是耗时操作的变量,将改变量初始化设置成懒惰初始化。

kotlin 懒惰初始化变量,为什么是val类型?

Kotlin 的懒惰初始化变量只能是 val 类型,因为 var 类型的变量值可以改变,而懒惰初始化变量只能在第一次访问时被初始化,因此变量的值不能被改变,因此只能是 val 类型。

13、as关键字——强制类型转换

14、数据类

数据类可以应用解构定义多个变量

定义数据类需要满足的三个条件:

(1)数据类必须至少带有一个参数的主构造函数

(2)数据类的主构造函数的参数必须是var或者val类型

(3)数据类不能使用abstract、open、sealed和inner修饰符

15、接口和抽象类

实现接口的类,必须实现接口的所有属性和函数。

实现接口的抽象类,不必实现接口的所有属性和函数。但是继承抽象类的子类,必须实现接口的所有属性和函数。

16、关键字in和out

17、函数式编程

包括三类:变换、过滤和合并

变换函数:map和flatmap

过滤函数:filter

合并函数:zip和fold

18、kotlin支持的编程格式

 命令式编程

函数式编程

面向对象编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git与Repo:开源开发的得力工具组合

Git与Repo&#xff1a;开源开发的得力工具组合 1. 引言 开源开发在当今的软件行业中扮演着至关重要的角色。它不仅推动了技术的创新和进步&#xff0c;也促进了开发者之间的合作与共享。随着越来越多的开源项目的涌现&#xff0c;有效的代码管理和版本控制成为了必不可少的工…

【已解决】‘python‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

【已解决】‘python‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 环境变量配置 已经下载了安装包的情况下&#xff0c;这个问题就是环境变量没有配置的问题&#xff08;共两个&#xff09;。 分别是pythonx.x\Scripts\和pythonx.x\ 自定义安装环境变量…

算法与数据结构-字符串匹配算法

文章目录 主串和模式串BF 算法RK 算法BM算法1. 坏字符规则2. 好后缀规则 主串和模式串 在开始讲解这个算法之前&#xff0c;我先定义两个概念&#xff0c;方便我后面讲解。它们分别是主串和模式串。这俩概念很好理解&#xff0c;我举个例子你就懂了。 比方说&#xff0c;我们…

HTTP代理SSL连接:保障网络安全的重要协议

HTTP代理SSL连接是一种网络安全协议&#xff0c;它结合了HTTP代理和SSL/TLS协议&#xff0c;用于在客户端和服务器之间建立加密通信通道。HTTP代理SSL连接可以保护数据在传输过程中不被窃听、篡改或伪造&#xff0c;从而确保数据的完整性、保密性和可靠性。在本文中&#xff0c…

selenium使用已经获取的cookies登录网站报错unable to set cookie的处理方式

用selenium半手动登录github获取其登录cookies后&#xff0c;保存到一个文件gtb_cookies.txt中。 然后用selenium使用这个cookies文件&#xff0c;免登录上github。但是报错如下&#xff1a;selenium.common.exceptions.UnableToSetCookieException: Message: unable to set co…

如何实现服务器时间同步

为什么要做时间同步 在进行系统测试的时候&#xff0c;服务器时间同步很重要。例如web应用服务器与数据库服务器的时间同步&#xff0c;有一个定时任务&#xff0c;它的执行&#xff0c;如果服务器直接时间不通过&#xff0c;可能造成执行周期出现混乱。 ntp实现服务器时间同…

服务断路器_Resilience4j介绍

什么是Hystrix 我们耳熟能详的就是Netflix Hystrix,这个断路器是SpringCloud中最早支持的一种容错方案&#xff0c;现在这个断路器已经处于维护状态&#xff0c;已经不再更新了&#xff0c;你仍然可以使用这个断路器&#xff0c;但是呢&#xff0c;我不建议你去使用&#xff0…

静态链接与动态链接

目录 静态链接 地址空间分配 静态链接的详细过程 静态链接库 动态链接 位置无关代码 延迟绑定机制 本篇会重点介绍静态链接&#xff0c;动态链接&#xff0c;延迟绑定机制 问&#xff1a;两个或者多个不同的目标文件是如何组成一个可执行文件的呢? 答&#xff1a;这就…

【计算机网络】 基于UDP的简单通讯(客户端)

文章目录 客户端流程代码实现添加头文件以及库依赖加载库创建套接字发送接收数据关闭套接字、卸载库 测试 客户端 流程 客户端跟服务端差不多&#xff0c;也要先加载库&#xff0c;在加载库之后也要创建套接字&#xff0c;但是客户端一定是没有绑定ip地址的&#xff0c;之后是…

【Java 基础篇】Java 注解详解

在 Java 编程中&#xff0c;注解&#xff08;Annotation&#xff09;是一种元数据&#xff0c;它提供了关于程序代码的额外信息。注解不直接影响程序的执行&#xff0c;但可以在运行时提供有关程序的信息&#xff0c;或者让编译器执行额外的检查。 本文将详细介绍 Java 注解的…

Mac电脑剪切键Command-X键失灵

在Mac上&#xff0c;Command-X键的剪切功能失效可能是由于键盘快捷键设置出现错误或者剪切的目标文件处于只读状态。 可以尝试以下方法进行解决&#xff1a; 1.检查键盘快捷键设置&#xff1a;转到Apple菜单 > 系统偏好设置 > 辅助功能 > 键盘 > 快捷键&#xff0c…

Pytorch梯度累积实现

前言 主要用于解决显卡内存不足的问题。 梯度累积可以使用单卡实现增大batchsize的效果 梯度累积原理 按顺序执行Mini-Batch&#xff0c;同时对梯度进行累积&#xff0c;累积的结果在最后一个Mini-Batch计算后求平均更新模型变量。 a c c u m u l a t e d ∑ i 0 N g r a…

nat综合实验

路漫漫其修远兮,吾将上下而求索。 实验目的如图 实验思路&#xff1a;配置内网&#xff0c;再配置外网&#xff0c;再做nat clien1配置 clien2配置 pc3配置 lsw1配置 sysname lsw1 # vlan batch 10 20 30 # interface MEth0/0/1 # interface Eth-Trunk1port link-type trunkp…

【Linux】IO操作

IO 典型 IO 模型阻塞 IO非阻塞 IO信号驱动 IO异步 IO常见问题 多路转接模型select 模型poll 模型epoll 模型 典型 IO 模型 IO 操作指的就是数据的输入输出操作&#xff1b;IO 过程可以分为两个步骤&#xff1a;等待 IO 就绪、数据拷贝 阻塞 IO 发起 IO 操作&#xff0c;若当…

【面试高高手】 —— Java基础(36题)

文章目录 1. 八大基本数据类型分类2. 重写和重载的区别3. int和integer区别4. Java的关键字5. 什么是自动装箱和拆箱&#xff1f;6. 什么是Java的多态性&#xff1f;7. 接口和抽象类的区别&#xff1f;8. Java中如何处理异常&#xff1f;9. Java中的final关键字有什么作用&…

iview 的table表格组件使单元格可编辑和输入

表格的列定义中&#xff0c;在需要编辑的字段下使用render函数 template表格组件 <Table border :data"data" :columns"tableColumns" :loading"loading"></Table>data中定义table对象 table: {tableColumns: [{title: 商品序号,k…

服务断路器_Resilience4j的断路器

断路器&#xff08;CircuitBreaker&#xff09;相对于前面几个熔断机制更复杂&#xff0c;CircuitBreaker通常存在三种状态&#xff08;CLOSE、OPEN、HALF_OPEN&#xff09;&#xff0c;并通过一个时间或数量窗口来记录当前的请求成功率或慢速率&#xff0c;从而根据这些指标来…

【JVM】第三篇 JVM对象创建与内存分配机制深度剖析

目录 一. JVM对象创建过程详解1. 类加载检查2. 分配内存2.1 如何划分内存?2.2 并发问题 3. 初始化4. 设置对象头5. 执行<init>方法 二. 对象头和指针压缩详解三. JVM对象内存分配详解四.逃逸分析 & 栈上分配 & 标量替换详解1. 逃逸分析 & 栈上分配2. 标量替…

用纹理图集优化3D场景性能【Texture Atlas】

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 在 Unity 中开发移动应用程序时&#xff0c;确保一切都得到优化始终至关重要。 最大化帧速率使我们能够专注于优化脚本、烘焙灯光、修改对象等。 当我们将移动应用程序带入虚拟现实时&#xff0c;这一点变得更加重要。 虽…

嵌入式Linux应用开发-文件 IO

嵌入式Linux应用开发-文件 IO 第四章 文件 IO4.1 文件从哪来&#xff1f;4.2 怎么访问文件&#xff1f;4.2.1 通用的 IO 模型&#xff1a;open/read/write/lseek/close4.2.2 不是通用的函数&#xff1a;ioctl/mmap 4.3 怎么知道这些函数的用法&#xff1f;4.4 系统调用函数怎么…