这里 ImmutableList可以强转为 MutableList并修改其中的元素。 ?...Kotlin代码要实现100%兼容Java,则无论穿的衣服是 MutableList还是 ImmutableList,卸下伪装后都只能是Java的 List。...剩下的自己去翻文档吧。 ? 真正的Immutable 整个库并不复杂(因为还在开发中),但也不简单,因为相比于"可变","不可变"要考虑的地方更多,暂且抛开这点不谈,先来简单看看库的用法。...因此库里A组的方式都应该无视掉… ? PersistentList连元素都不能变了!可…除了加法运算…肯定还支持减法运算。难道只是数组内元素不可变,但数组本身是可变的?...共享的数据 在翻看源码实现的时候,发现了一个比较奇怪的地方,那就是其数据的保存方式。下面同样以 PersistentVector为例。 直接上图: ?
上次我们学习了kotlin的字符串操作、数字类型、标准库函数,接下来我们来学习集合,和其他变量类型一样,集合也分为可变和只读 一、List 1.List集合创建与元素获取 调用listOf函数创建集合,...我们可以通过和数组一样的方式: "变量[下标]" 来获取元素,或者使用get函数获取 fun main() { //listOf创建List集合 var list = listOf("张三...遍历集合 kotlin新增了三种方式遍历集合 fun main() { //调用mutableListOf创建可变list val mutableList = mutableListOf....解构 之前我们提到过,kotlin允许在一个表达式中给多个变量赋值 可以用"_"过滤不想要的元素 fun main() { //调用mutableListOf创建可变list val...mutableList = mutableListOf("张三", "李四", "王五") val (a, _, c) = mutableList } 二、Set 1.Set创建与元素获取
介绍 同样在Kotlin中会有List、Map、Set,而与Java中数据结构大多相同,也略有区别。Kotlin中的集合分为可变集合与不可变集合。...// 创建List不能添加和删除只能遍历 var immutableList: List = listOf(1, 2) } } List的遍历 在Kotlin中的遍历和...,通过filter,我们过滤了小于1的元素。...而通过first,我们会找到第一个等于3的元素。...var first = mutableList.first { it == 3 } } } 在Kotlin的闭包中,可以使用很多方式来指定参数,如果没有指定参数的话
因为种种原因,谷歌把Android的第一开发语言改成了Kotlin。虽然近来用Java编写Android是是非常便利的。...var 变量名:变量类型 = 变量值 //声明Int类型变量num,赋值10 var num : Int = 10 ps:kotlin中不需要分号结尾,声明变量时数据可以省略数据类型 注:用val关键词声明的变量类似于...//从start截取,到end前一个结束 str.substring(start, end) //以regx为界限切割成数组 str.split(regx) 四、容器 1、容器的基本操作...3.1、基本方法 //定义一个队列 var list:MutableList = mutableListOf(); //添加元素,将元素添加到对尾...:MutableList = mutableListOf() //此时it.age的含义就是:将humanList中的人,按照年龄来升序排 humanList.sortBy{ it.age
在本文中,小编将为大家介绍如何在Java中以编程的方式将【比特币-美元】市场数据CSV文件转化为XLSX 文件。...创建项目 (1)使用 Visual Studio 2022,创建一个新项目 ( CTRL+SHIFT+N ) 并 在下拉列表中 选择 C#、 所有平台和 WebAPI ,以快速找到项目类型ASP.NET...WeatherForecastController.cs 文件重命名为 BTCChartController.cs ,当更改文件名时, Visual Studio 将提示您并询问您是否还要更改项目中的所有代码引用...这会: 将HttpGet属性 中的 Name更新 为 GetBTC-USDChartWorkbook, 将返回类型更改为 FileContentResult, 注释掉与天气预报相关的代码 添加调用GetCsvData...vnd.openxmlformats-officedocument.spreadsheetml.sheet", "BTC_Chart.xlsx"); } } // Get() 运行结果如下所示: 总结 以上就是在C# 中以编程的方式将
三种循环遍历的用法说明如下: 1、for-in循环 与Java类似,通过for语句加上in条件,即可轻轻松松依次取出集合中的所有元素。...,它自身并非具体的元素,而是指向元素的存放地址,所以迭代器循环其实是遍历所有元素的地址。...为了将代码精简做到极致,Kotlin给容器创造了forEach方法,明确指定该方法就是要依次遍历容器。...,我们发现集合在实战中存在诸多不足,主要包括以下几点: 1、集合不允许修改内部元素的值; 2、集合无法删除指定位置的元素; 3、不能通过下标获取指定位置的元素; 鉴于集合的以上缺点难以克服,故而实际开发基本用不到集合...但是由于映射的元素是个键值对,因此它的循环遍历方式与集合稍有不同,详述如下: 1、for-in循环 for-in语句取出来的是映射的键值对元素,若要获取该元素的键名,还需访问元素的key属性;若要获取该元素的值对象
*/ // List的List是只读的,所以它只有一个返回类型为 T 的元素的方法 get,而没有定义任何类型为T的元素存储到列表中的方法,因为它是协变的...// 在 Kotlin 中这段代码是合法的。...,所有这个类的使用者都不用再考虑这些了。...* Kotlin中的 MutableList 和 Java中的 MutableList 是一个意思。...的元素 // MutableList 投影成了 MutableList<out Any?
有任何问题,欢迎随时与我交流~ ---- 本章将介绍Kotlin标准库中的集合类,我们将了解到它是如何扩展的Java集合库,使得写代码更加简单容易。...(1)列表 列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。 列表在数据结构中可表现为:数组和向量、链表、堆栈、队列等。...5.3.7 映射操作符 map(transform: (T) -> R): List 将集合中的元素通过转换函数transform映射后的结果,存到一个集合中返回。...c2, c3] 从代码运行结果我们可以看出,使用 map 是把list中的每一个元素都映射成一个List-n,然后以这些List-n为元素,组成一个大的嵌套的List返回。...() [a1, a2, a3, b1, b2, b3, c1, c2, c3] 5.3.8 分组操作符 groupBy(keySelector: (T) -> K): Map> 将集合中的元素按照条件选择器
五、修改 MutableList 集合的 mutator 函数 1、添加元素运算符 += 和 删除元素运算符 -= 2、通过 Lambda 表达式筛选要删除的元素 六、List 集合遍历 七、List...Map 集合 一、List 创建与元素获取 ---- Kotlin 中的集合分为两类 , 只读集合 和 可变集合 ; 调用 listOf 函数 , 可以 直接创建 List 集合 ; 通过 [] 下标可以...集合 的 函数 统称为 mutator 函数 ; 1、添加元素运算符 += 和 删除元素运算符 -= 运算符重载 : MutableList 集合 还有一些 运算符重载 , 添加元素运算符 += 和...删除元素运算符 -= ; 向 MutableList 集合 中添加一些元素 , 可使用 += 运算符 : mutableList += "Jack" 其效果等同于 mutableList.add("Jack...") } 执行结果 : name1 = Tom name3 = Jack 八、Set 集合 ---- List 集合中的元素是 可以重复 的 , Set 集合中的元素 不可重复 ; 调用 setOf 函数
这就是面向对象范式混合函数式编程的自由乐趣吧! 本章将介绍Kotlin标准库中的集合类,我们将了解到它是如何扩展的Java集合库,使得写代码更加简单容易。...集合类分类 List 列表 List 列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾。列表在数据结构中可表现为:数组和向量、链表、堆栈、队列等。...Set 集 Set 集是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放一堆溜溜弹珠。 Set 集中没有重复对象。...在 Map 映射表中 key(键)是唯一的 MutableMap 支持添加和删除元素的Map 7.2 不可变集合类 List 列表分为只读不可变的 List 和 可变 MutableList (可写入删除数据...集合类持有的是对象,而怎样的放入正确的对象类型则是我们写代码过程中需要注意的。下一章节中我们将学习泛型。
集合类可以说是我们在写代码过程中最最常用的类之一。我们先来看下没有泛型之前,我们的集合类是怎样持有对象的。在Java中,Object类是所有类的根类。...这种实现方式,存在的问题有两个: 向集合中添加对象元素的时候,没有对元素的类型进行检查,也就是说,我们往集合中添加任意对象,编译器都不会报错。...现在,我们再看 popAll(Collection dst)方法,该方法将Stack中的元素依次取出add到dst中,如果不用通配符实现: // popAll method without wildcard...super T 8.6 类型擦除 Java和Kotlin 的泛型实现,都是采用了运行时类型擦除的方式。也就是说,在运行时,这些类型参数的信息将会被擦除。 泛型是在编译器层次上实现的。...对应地在Kotlin中并不存在MutableList::class, 而只有 MutableList::class 。
,然后,我们从list中读取一个元素,这时候,这个元素的返回类型是什么呢?...支持协变的List 在Kotlin中,有两种List,一种是可变的,一种是不可变的,即MutableList和List,其中List的申明如下,它已经实现的协变,所以Kotlin中的List只能读而不能写...这是Kotlin的特性,具体的使用方式,上面的文章已经讲了一个例子。...其实,编译器还是留了一手,申明处的泛型信息,实际上会以Signature的形式,保存到Class文件的Constant pool中,这样通过反射,就可以拿到具体的泛型类型了。...❝另外,我们将from的签名改为List,也是可以编译的,其原因就是Kotlin中的List已经支持协变了。 ❞ 相信大家通过这个例子,大概能理解协变和逆变的使用方式了。
虽然名字是 MutableList ,但是实际上这只是 Kotlin 的一个辅助类型,可以用 Tools – Kotlin – Show Kotlin Bytecode 查看它编译成 JVM 字节码之后的样子...加一个扩展方法就好了 inline fun <reified T Parcel.readMutableList(): MutableList<T { @Suppress("UNCHECKED_CAST...假如上面的例子是用 Java 写的,由于我们已经有了一个以 Parcel 为参数的构造方法,我们只需要这样实现 CREATOR 。...{ return arrayOfNulls(size) } } 在 Kotlin 中,使用命名的 companion object 确实可以生成一个对应名字的静态字段,并且它是公有的,会随着类的加载而被创建...requires a Parcelable.Creator… 在Kotlin编写代码过程中,需要用到parcelable来进行传值,按照以前的写法,进行序列化: class PayTypeInfo :
函数associateBy和groupBy构建来自由指定键索引的集合的元素的映射。key在keySelector参数中定义。...您还可以指定可选的valueSelector来定义将存储在map元素值中的内容。...区别 associateBy和groupBy之间的区别在于它们如何使用相同的键处理对象: associateBy使用最后一个合适的元素作为值。 groupBy构建所有合适元素的列表并将其放入值中。...开发者社区 国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。...Kotlin 开发者社区
为了实现这一目标,Kotlin 提供了一种将大部分工作委托给一个内部 ArrayList 实例并且可以自定义其行为的方式,并为此引入了一个新的关键字: by。 让我们看看类代理的工作原理。...{ return deletedItem } } 复制代码 by 关键字告诉 Kotlin 将 MutableList 接口的功能委托给一个名为 innerList 的内部 ArrayList。...通过桥接到内部 ArrayList 对象方法的方式,ListWithTrash 仍然支持 MutableList 接口中的所有函数。与此同时,现在您可以添加自己的行为了。...在装饰者模式中,装饰者类与被装饰类使用同一接口。装饰者会持有一个目标类的内部引用,并且包装 (或者装饰) 接口提供的所有公共方法。 在您无法继承特定类型时,委托模式就显得十分有用。...简而言之,Kotlin 会生成和维护所有代理所需的样板代码,换句话说,您可以将您的工作放心地委托给 Kotlin。
Kotlin 中会以 Unit 的形式返回 Kotlin 的函数可以定义在任何地方:顶层、类的成员、函数中定义另一个函数 调用顶层函数相当于 Java 中的 static 函数 // MyFile.kt...} 常用的集合操作 filter 只保留满足谓词条件的元素 map 将每一个元素按指定规则变换 any 判断列表中是否有满足谓词条件的元素 all 判断列表中是否所有元素都满足谓词条件 find 找第一个满足谓词条件的元素...,如果不存在则为 null,等价于将谓词条件作为参数的 first 或者 firstOrNull count 计算列表中满足谓词条件的元素个数 partition 按是否满足谓词条件,将列表分裂为 2...,如果列表长度不同,则合并后的元素个数是较短列表的长度,其余部分将被忽略 flatten 将嵌套的列表展开 flatMap 是 map 和 flatten 的组合 distinct 保留列表中互不相同的元素...[1, 2, 3, 4] 在底层,kotlin.List 有一个子类 kotlin.MutableList,而 kotlin.MutableList 会用 java.util.ArrayList 来实现
前言 本文主要介绍的是关于Kotlin 实现基本的数据结构 Stack 和 LinkedList,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。...Stack Java中Stack由List实现,Kotlin中有MutableList,Stack类的基本定义如下,继承Iterator为了迭代遍历: class Stack<T : Comparable...(): String { return this.items.toString() } 基本操作实现 // pop操作,弹出栈顶元素即链表最末端元素,可为null fun pop(): T?...previous = prev node.previous = null // 将断开的节点前后置null node.next = null return node.value // 返回删除节点的...value } 以上,用kotlin实现基本的数据结构stack和linkedlist.
虽然这项功能仍是实验性质的,但是这并不妨碍我们在 Kotlin 上正常使用,事实上,Kotlin 文档中的这篇文章就详细介绍了如何自定义你自己的 Kotlin Script。...: Boolean { return list == other } } 这部分代码使得以下特性得以实现: 数组的下标从 1 开始 当使用 0 作为下标时,u8 中的所有元素都将被赋值...多下标操作 在早期版本,我尝试直接使用一个 typealias(这很像 C++ 的 define)将 u8 直接定义为一个 MutableList,但这样做会导致很多操作符无法被正确的重载...Kotlin 并不支持通过 [element] 的方式创建一个常规数组 —— 事实上,编译器会告诉你这种创建方式只能适用于注解参数中。...,而实际上: 1 `|` 2 等价于: 1.`|`(2) 通过这种方式,我们可以使用 | 字符优雅的创建 u8。
截取——substring() 替换——replace() 分割——split() 注意: Java中 split()返回的是一个String[], 而 kotlin中返回的是一个 List (2)、...—— 是否非空 clear —— 清空容器 contains —— 是否包含指定元素 count —— 获取元素个数/ 也可以通过 size 获取 C: 容器初始化 kotlin中的容器可以在定义的时候就执行初始化赋值操作...() while(iterator.hasNext()){ val user=iterator.next() ... } 迭代器中存储的并非真实的元素,而是元素的地址,类似于C中的指针。...removeAt可以删除指定索引位置的元素 B: 遍历方式 除了 for-in 、迭代器、forEach, 还有一种根据索引遍历的方式: // indices 表示userList的索引数组。...这种方式本质上也是采用了for-in, 但遍历的是索引 for(i in userList.indices){ val user=userList[i] ... } C: 排序 MutableList
= sum(1,10,0.6) val result2 = sum(1,10,0.6,"kotlin") // compile error } Kotlin 默认的上界是Any?...Any 类似于 Java 中的 Object,它是所有非空类型的超类型。但是 Any 不能保存 null 值,如果需要 null 作为变量的一部分,则需要使用Any?。Any?...类型投影(Type projections) 在上一篇文章>中,曾经介绍过 MutableList 是不变的,可读可写,没有使用 in、out 修饰。...而使用 in 时,编译可以通过,因为该参数只能出现在方法的入参。 此时,list2 和 list3 分别表示一个受限制的 MutableList。在 Kotlin 中,这种行为被称之为类型投影。...*代指了所有类型,相当于Any?。 例如:MutableList 表示的是 MutableList<out Any?
领取专属 10元无门槛券
手把手带您无忧上云