「既然已经知道了interface
,就可以来看Collections
三大interface
——List
、Set
、Map
。和阵列Array
一样,是放入多笔资料的资料结构,一开始就要选好是成员固定
还是成员可变动
的状态。」
唯心在纸上将初始化的函式按照状态归类。
成员固定:listOf()
、mapOf()
和setOf()
。
成员可变动:mutableListOf()
、mutableMapOf()
和mutableSetOf()
。
「每种资料结构都有其特性:Array
不能改变长度,因为被宣告长度之後,会专门分配一块连续的记忆体
;List
重视成员之间的顺序
,所以可以用index
取得该位置的成员;Set
会马上合并重复的成员,因此成员都是独一无二
,但也因此不在乎成员之间的顺序;Map
因为成员存放的位置比较复杂,会让我们指定每个位置的key
来映射,所以可以用key
取得该位置的成员。」
「Collections
被学姐拿出来特别介绍,应该有特殊的地方罗?」得到猫咪的治癒後,诗忆以超出平常的敏锐发问。
「是的,Collections
提供各种好用的函式,之前需要写回圈才能做到的筛选,现在只需要呼叫filter
。虽然也可以再用一次之前饮料价钱的例子,不过老用同样的筛选条件缺乏新鲜感呢⋯⋯」唯心沈吟了片刻才作出决定。「这次用品项名来筛选吧。利用判断结尾字串的函式endsWith
来检验品项名,只保留奶茶系列的饮料。」
fun main() {
val drinks = listOf(Drink("奶茶", 50), Drink("绿奶茶", 30), Drink("可可", 40),
Drink("珍珠奶茶", 70))
val milkTeas = drinks.filter { it.name.endsWith("奶茶") }
println(milkTeas)
}
电脑在她的操作下印出[Drink(name=奶茶, price=50), Drink(name=绿奶茶, price=30), Drink(name=珍珠奶茶, price=70)]
的结果。
「现在我们再加上一个只要列出品项名的情境,比如请客提供的单子是不会附上价格的。这时可以用map
函式,虽然和Map
名字一样,其实相同的只有映射动作,会把类别成员的品项名属性拉出来,产生新的字串list
,然後再根据新list
去筛选。」
fun main() {
val drinks = listOf(Drink("奶茶", 50), Drink("绿奶茶", 30), Drink("可可", 40),
Drink("珍珠奶茶", 70))
val milkTeaNames = drinks.map(Drink::name).filter { it.endsWith("奶茶") }
println(milkTeaNames)
}
这次电脑果然只印出品项名[奶茶, 绿奶茶, 珍珠奶茶]
。
「如果只想请前两种奶茶,可以用take
函式,只是这样写的话,程序还是筛选出全部的奶茶才输出前两种。现在是因为我一开始列出的饮料只有四笔,所以时间没什麽影响。但如果饮料资料有上万笔的话,会希望加快回报的效率,找到两笔奶茶饮料就不继续筛选後面的饮料。这时候就要利用asSequence()
转成Sequences
类别,Sequences
类别的特性是一笔资料跑到终点才跑下一笔,而take(2)
的条件正在终点线内。这个特性还满实用的,好好记住唷。」唯心递出她的黄色萤光笔,诗忆接过後马上在asSequence()
划上深刻的重点线。
fun main() {
val drinks = listOf(Drink("奶茶", 50), Drink("绿奶茶", 30), Drink("可可", 40),
Drink("珍珠奶茶", 70))
val milkTeaNames2 = drinks.map(Drink::name).filter { it.endsWith("奶茶") } }.take(2)
val milkTeasNames2Seq = drinks.asSequence().map(Drink::name).filter { it.endsWith("奶茶") }.take(2) }
println(milkTeaNames2)
println(milkTeaNames2Seq.toList())
}
<<: [Day 23] 资料产品在设计与开发阶段的五个大坑
>>: [Day8] 机器学习进行时间序列预测及注意事项(上)
目标 使用 Pro Components 制作图表 萤幕截图 汇出png图 Vaadin Chart...
当你把产品包装好之後, 要怎麽销售出去呢? 『销售』套用在系统开发上面就是怎麽让外部的系统能够使用到...
Linked List为抽象的资料结构,概念有点像三国的连环船,一艘船(节点)连结着下一艘船(节点...
我们系统的沟通都是透过timestamp, 包含API参数跟资料库的储存都是以timestamp为主...
上篇只做出了大部分功能,有很多细节没做好,这篇会修正细节与优化 PostgreSQL IF stat...