在编写项目文件或者 MSBuild Target 文件的时候,我们经常会使用 来定义集合中的一项。在定义的同时,我们也会额外指定一些属性。...在定义 WalterlvY 集合的时候,我们使用了 %(Compile.FileName) 来获取编译文件的文件名。...于是,你在警告信息中看到的两个警告信息里面,一个输出了 Compile 集合中每一项的标识符(通常是相对于项目文件的路径),另一个输出了每一个 Compile 项中的 FileName 属性。...需要注意,如果 % 得到的项中某个属性为空,那么这一项在最终形成的新集合中是不存在的。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
String类型,在Kotlin中这表示它必须包含一个String实例) // strLen(null) // 如果允许调用这个方法的时候传给它所有的可能的实参,包括null...----------------------*/ /* * Kotlin的集合设计和Java不同的另一项重要特质是,它把访问集合数据的接口和修改集合数据的接口分开了。...* 一般的规则是在代码的任何地方都应该使用只读接口,只在代码需要修改集合的地方使用可变接口的变体。...{ } } // 代码清单6.27 另一个使用集合参数的Java接口 // public interface DataParser...当你在 Kotlin 中继承 Java 类或者实现 Java 接口时,你需要仔细考虑参数的可空性和可变性。 Kotlin的Array 类就像普通的泛型类 但它会被编译成 Java 数组。
; 调用该 " << " 操作符 , 相当于调用了 map 集合的 leftShift 方法 , 该方法有 2 个参数 : Map self 参数 : 原始 map 集合 , 是 "...<< " 操作符左侧的值 ; Map other 参数 : 要添加的 map 集合 , 是 " << " 操作符右侧的值 ; 该方法的返回值是 原始的 map 集合 , 该集合已经增加了新的键值对集合..., 不会创建新的集合 ; map 集合的 leftShift 方法 函数原型 : /** * 重载左移位运算符,以提供将一个映射条目放入另一个映射的简单方法。...* @param other 另一个 map 集合,其条目应添加到原始 map 集合中。...* @return 返回增加了元素的 map 集合 * @since 1.7.2 */ public static Map leftShift(Map
name : names)) for (name in names) println(name) //如果names集合中包含text对象则打印yes if (text in names)...判断一个对象是否为一个类的实例,可以使用is关键字 与 Java 中的instanceof关键字类似,但在 Kotlin 中如果已经确定了一个对象的类型,可以在接下来的代码块中直接作为这个确定类型使用。...fun say(str: String): String { return str } 同时,在 Kotlin 中,如果像这种简单的函数,可以简写为 fun say(str: String):...){ } 2.3.3 变参函数 同 Java 的变长参数一样,Kotlin 也支持变长参数 //在Java中,我们这么表示一个变长函数 public boolean hasEmpty(String......2.3.5 将函数作为参数 Kotlin 中,可以将一个函数作为参数传递给另一个函数 fun lock(lock: Lock, body: () -> T ) : T { lock.lock
本文是对<<kotlin实战 中 “lambda编程”一章的总结,主要记录了一些我认为比较重要的点 在kotlin中常见的lambda用法主要由以下几种: 与集合一起使用 lambda可以与任意java...一次中间操作返回的是另一个序列,这个新序列知道如何变换原始序列中的元素,而一次末端操作返回的是一个结果,这个结果可能是集合、元素、数字等。 序列中中间操作的计算都是由末端操作触发的。...至于序列如何手动创建,这里不做细究 kotlin与Java函数式接口 函数式接口是指带有一个抽象方法的接口,在java api中比如Runnable、Callable等 我们在实际使用kotlin时,...表达式会被直接替换到最终生成的代码中,而不是被包含在一个实现了函数接口的匿名类中。...注意如果lambda参数在某个地方被保存起来,以便后面可以继续使用,这种lambda表达式将不会被内联,因为必须要有一个包含这些代码的对象存在 内联的集合操作 kotlin标准库中的map、filter
今天我们主要围绕函数来展开讲解一下kotlin的函数。 在Java中的函数比较简单,通常情况下我们会将某些特定的操作(为了达成某个目的的一段代码逻辑)封装成一个函数,方便不同的地方调用。...当然在kotlin中函数也是同样的作用了。...其实之前的文章中已经用过了,比如集合的filter函数,看下当时我们是怎么使用的: val youngPersonList = users.filter { it.age < 20 } 在集合users...:User -> user.age < 20 }) 上面这种就是一种创建函数类型实例的一种方式:Lambda表达式,基于kotlin的一些规约: Lambda 表达式包含在大括号之内, 在完整语法形式中...filter就是将一个集合通过一个函数来过滤出另一个集合,这个我们都很容易理解。
保留了原来的for each循环,同时增加了区间控制 [11.png] 5、集合 Kotlin的集合与OC的集合相似,分为可变集合和不可变集合(lists、sets、maps 等)。...kotlin中的可变集合对Java的集合进行了包装,同时它实现了一套不可变集合库。 [12.png] 访问: [13.png] 6、伴生对象 Kotlin中没有静态属性和方法。...可以这么调用: [32.png] 我们声明一个局部函数,然后把他作为参数传递给另一个函数。我们还可以使用Lambda表达式来表示函数参数。...[40.png] 多平台项目由三种类型的模块组成: ● 公共模块 公用模块只包含与平台无关的Kotlin代码以及Kotlin公共标准库代码。同时还包含不含实现的平台接口声明。...● 常用模块 与平台模块相互依赖的模块 ---------- 我对Kotlin的看法 ----------- 1、确实是一门很优秀的语言。语言简洁,包含各种语言的优秀特性。
和 setter 方法 3.支持Java 8提供的新特性,Lambda表达式,函数式接口,流API等 … 引言 在 Kotlin 的循环语句中,while 循环还有 do…while 循环和 Java...迭代数字 Java 中的 for 循环,总是先初始化值,判断值是否在限定的范围内,在每一次循环更新值,一直到超出范围。.../* Java */ for(int i = 100; i = 0; i-=2) { println(i); } 迭代集合 不管是在 Java 中还是在 Kotlin 中,for 循环使用最多的场景还是对集合的迭代...Kotlin 中使用 in 来检查一个值是否在区间中,或者它的逆运算 !in。同时 in 也可以作为 when 的分支。...同时 Kotlin 中的 throw 结构以及 try…catch 结构和 Kotlin 中的 if 语句一样是表达式,可以作为另一个表达式的一部分使用。
语句和表达式的区别在于,表达式有值,并且能作为另一个表达式的一部分使用;而语句总是包围着它的的代码块中的顶层元素,并且没有自己的值。在Java 中,所有的控制结构都是语句。...in '0'..'9' 区间是包含或者闭合的,意味着第二个值始终是区间的一部分。...与 Java 不同的是,Kotlin 中的 throw 结构是一个表达式,能作为另一个表达式的一部分使用: val percentage = if (number in 0..100...: 假设现在有一个函数,它的作用是在集合元素中添加分割符号,然后将集合转化为字符串。...[", /* postfix */ "]"); 要改变包含Kotlin 顶层函数的生成的类的名称,需要为这个文件添加 @JvmName 的注解,将其放到这个文件的开头,位于包名的前面: @file:JvmName
3,完全兼容Java Kotlin的另一个优势就是可以100%的兼容Java,Kotlin和Java之间可以相互调用。...例如: 5,集合 Kotlin的集合与OC的集合相似,分为可变集合和不可变集合(lists、sets、maps 等)。...kotlin中的可变集合对Java的集合进行了包装,同时它实现了一套不可变集合库。...3,字符串模板 字符串中可以包含变量或者表达式,以$符号开头(这跟JSP的EL表达式有点像),比如: 4,操作符重载 Kotlin为基本的运算符提供了固定名称函数表,此部分比较多,关于这方面的内容...Kotlin Native Kotlin Native是一种将Kotlin源码编译成不需要任何VM支持的目标平台二进制数据的技术,编译后的二进制数据可以直接运行在目标平台上,它主要包含一个基于LLVM的后端编译器的和一个
找到 AndroidStudio 的 Tools 选项,依次选 Kotlin、show Kotlin ByteCode,然后在新出现的代码窗口点击 Decompile 就可以看到生成的 Java 代码了...Kotlin 的这种解构方式用的比较多的地方是在 Map 数据结构中,它不需要像 Java 一样先拿到 Entry 对象,然后才能拿到 key 值和 value 值,直接用这种解构即可。...Kotlin 常用集合 在 Kotlin 中常用的集合类主要有 List:有序集合,可通过索引访问元素;Set:唯一元素集合,无重复元素的集合;Map:键值对集合,键是唯一的。...一般在声明的时候就定义了集合是否可变,可变的集合声明就是 mutableListOf()、mutableSetOf()、mutableMapOf()....> }) // 输出:5 // 10、reduce:集合中第一项和第二项进行处理,得出的结果再和第三项进行处理,一直处理到最后一个元素 println(list.reduce { v1, v2
Kotlin对集合操作类新增了很多快捷的高阶函数操作,各种操作符让很多开发者傻傻分不清,特别是看一些Kotlin的源码或者是协程的源码,各种眼花缭乱的操作符,让代码完全读不下去,所以,本文将对Kotlin...,像这样的高阶函数,在Kotlin中有很多,这也是很多基础功能用Kotlin开发会更加方便的原因之一。...❞ 由此可见,在Kotlin中,reduce实际上是一个不完善的高阶函数,大部分时候,都应该避免使用它,而应该使用flod来代替,而且,要注意的是,在其它语言中,例如JavaScript中,它的reduce...map相对来说比较好理解,它实现的是一对一的转换,但是另一个——flatMap就不是这么好理解了。 所以我们先来了解另一个操作符——flatten。 假设我们有这样一个嵌套的List,如下所示。...那么我们在使用Kotlin的高阶函数来对集合进行处理时,是否需要担心一些隐藏的性能开销呢?
然后停止执行,直到我们要求得到另一个数字。下面是一个无限的下一个斐波那契数字的列表。...我们创建了一个集合,然后我们有3个中间处理步骤,加起来有4个集合。其中3个包含了这个数据文件的大部分,需要1.53GB,所以它们都需要消耗超过4.59GB。这是对内存的巨大浪费。...Java 8引入了流,允许集合处理。它们的行为和代码外观类似于Kotlin的Sequence。...KotlinSequence可以在普通模块、Kotlin/JVM、Kotlin/JS和Kotlin/Native模块中使用。...我的建议是很少使用Java流,只在计算量大的处理中使用,这样可以从并行模式中获益。否则,使用Kotlin stdlib函数,以获得同质化的、干净的代码,可以在不同的平台上或共同的模块上使用。
它们把一个集合作为第一个操作数;第二个操作数可以是一个元素或者是另一个集合。 返回值是一个新的只读集合: plus 的结果包含原始集合 和 第二个操作数中的元素。...Kotlin 标准库包含用于取集合的一部分的扩展函数。...12.1、常用聚合操作函数 Kotlin 集合包含用于常用的 聚合操作 (基于集合内容返回单个值的操作)的函数 。...右边是单个元素时,会移除它的第一个匹配项。 如果它是一个集合,那么它的所有元素的每次出现都会删除。 例如,如果列表包含重复的元素,它们将被同时删除。 第二个操作数可以包含集合中不存在的元素。...asReversed() 在可变列表上调用会返回另一个可变列表,该列表是原始列表的反向视图。在该视图中的更改将反映在原始列表中。
, 29 7月 2022 作者 847954981@qq.com 后端学习, 我的编程之路 Kotlin安卓开发学习(3) 数据类与单例类 在Java中,数据类占据着重要的角色,其通常需要重写包括...单例类是Kotlin特有的功能,其实现的是最常用、最基础的设计模式之一的单例模式,它可以避免创建重复的对象。比如我们希望某个类在全局最多只能拥有一个实例,这时就可以使用单例模式。..., "Grape") 这里我们 listof() 这个Kotlin方法来快速实现集合的创建。...{ it.length } map函数是最常用的函数式API之一,它用于将集合中的每一个元素映射成为另一个值,如我们希望集合中所有字母变为大写: val newList = list.map { it.toUpperCase...() } 另一个函数式API为 filter,其用于过滤集合中的数据,配合map使用如: val newList = list.filter { it.length <= 5 } //过滤出五个字母以内的水果
在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。...Spring Boot Plus Kotlin" 在以上实例中我们使用了 Redis 的 SET 和 GET 命令。...使用sadd 命令添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。...:以上实例中 kotlin 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。...按照上面的步骤在另一个项目中再次配置一次,启动后,该项目也会自动进行了session共享。
前言 本文是针对kotlin集合的第三篇,继续深入学习关于kotlin集合的使用,学习如何快捷插入数据,plus和minus 分组操作,自定义分组输出等等。...为方便跳转,贴一下前两篇文章的链接 Kotlin 集合-转换,过滤和检测 - Z同学 (zinyan.com) Kotlin 集合 基本介绍 - Z同学 (zinyan.com) 加减操作:plus 和...如果是移除一个集合对象,那么minus会移除原始集合中的所有存在的元素。 在Map中的特殊定义 因为map是键值对的关系,所以plus和minus 操作符的使用场景,有别于其他的集合对象。...因为map下key 唯一 分组:groupBy 在kotlin提供的针对集合元素进行分组操作:groupBy()该函数才使用lambda语法,并返回一个map对象。...简单描述就是:在分组的时候,直接将值给进行转换了而不是使用原始集合中的数值。
字节码 + JVM 使其平台无关,与此同时也衍生出另一个无关性——语言无关性。像 Kotlin、Groovy、Scala、Clojure、JRuby 等语言都可以运行在 JVM 之上。...理论上只要能将源代码编译成符合 JVM 规范的字节码,任何语言都可以在 JVM 中运行。 字节码是连接语言和 JVM 的关键桥梁,今天我们就一起聊聊这个关键人物。...然后用支持十六进制的文本工具(比如 sublime)打开,你会看到如下内容: Class 十六进制 在一堆看似毫无规律的字符中,我们发现开头几个字好像有什么特别的含义——cafe babe,咖啡宝贝?...Class 文件中没有任何分隔符, 各数据项严丝合缝依次排列。哪个字节代表什么含义,谁挨着谁,长度是多少,都是有规定的,不能改变。...方法集合attributes_countu21属性计数attributesattribute_infoattributes_count属性集合 顺序由上到下,严格限制,不可修改 下面用一张更形象的图展示一下
在2019年Google I/O大会上,Google 宣布今后将优先采用 Kotlin 进行 Android 开发。...Google 列举的 Kotlin 的优势: 富有表现力且简洁:可以使用更少的代码实现更多的功能。表达自己的想法,少编写样板代码。...更安全的代码:Kotlin 有许多语言功能,可帮助你避免null指针异常等常见编程错误。 可互操作:可以在 Kotlin 代码中调用 Java 代码,或者在 Java 代码中调用 Kotlin 代码。...fun main() { // .. } 另一个main方法带有参数 fun main(args: Array) { // ... } 3....集合 遍历一个集合 for (item in items) { println(item) } 检查集合中是否包含某个对象,用in操作 when { "orange" in items
对于那些处在技术前沿和喜欢 Kotlin 的开发者来说,本篇文章和他们息息相关。所以,下面就让我们来看一下怎样在 Kotlin 中使用集合吧。 Kotlin中的集合是基于 Java 集合的框架。...在使用Kotlin集合时准确区分这几种两种对象对于避免不必要的错误和 bug 都非常有用。 Kotlin允许像 Java 类似的写法创建 Kotlin 的集合实例。...Kotlin 的集合继承了 Java 的 List 的接口。...("CollectionsKt") package kotlin.collections import kotlin.comparisons.compareValues 正如之前所提的,这个文件包含了所有的集合扩展方法...让我们来看一下我们在 Java 代码中怎么调用 Kotlin 集合: java.util.List<Integer list = kotlin.collections.CollectionsKt.listOf
领取专属 10元无门槛券
手把手带您无忧上云