println(nollstations.count())
println(nollstations.size)
println(nollstations.first())
println(nollstations.component1())
println(nollstations.component2())
println(nollstations.component3())
println(nollstations.component4())
println(nollstations.component5())
println(nollstations.last())
println(nollstations.contains("嘉定北"))
println(nollstations.drop(1))
println(nollstations.dropWhile { it.isEmpty() })
println(nollstations.dropLast(1))
println(nollstations.dropLastWhile { it.isEmpty() })
println(nollstations.find { it.contains("迪") })
println(nollstations.findLast { it.contains("嘉") })
println(nollstations.joinToString())
println(nollstations.joinToString { it + "站" })
println(nollstations.joinToString(separator = ",",prefix = "地铁11号线",limit = 4))
println(nollstations.take(2))
println(nollstations.takeLast(3))
println(nollstations.drop(4))
println(nollstations.dropLast(5))
println(nollstations.sliceArray(2..5).joinToString())
println(nollstations.reversed().joinToString())
println(nollstations.reversedArray().joinToString())
val numbers = arrayOf(0,-999,100,33,-2,3000)
println(numbers.sortedArray().joinToString())
println(numbers.sortedArrayDescending().joinToString())
println(nollstations.sortedBy { it.length })
println(nollstations.sortedByDescending { it.length })
println(numbers.map { it -> "数字:" +it })
println(numbers.filter { it % 2 == 0 })
println(numbers.max())
println(numbers.min())
println(nollstations.maxBy { s -> s.length })
println(nollstations.distinct())
println(nollstations.distinctBy { s -> s.length })
println(numbers.all { it > 0 })
println(numbers.any { it < 0})
println(numbers.none { it == 0 })
println(numbers.sum())
println(numbers.sumBy { 10_000 + it })
println(numbers.average())
println(nollstations.reduce{ s1,s2 -> s1 + "," + s2 })
println(nollstations.reduceRight{ s1,s2 -> s2 + "," + s1 })
println(nollstations.fold("地铁11号线站点"){ s1,s2 -> s1 + "," + s2 })
println(nollstations.foldRight("是地铁11号线的站点。"){ s1,s2 -> s1 +"," + s2 })
val numbers2 = arrayOf(2,3,4,5,9,-988,-20)
val newStations = arrayOf("嘉定北","嘉定新城","花桥")
val twoNumbersArray = numbers.plus(numbers2)
val nolltotalStations= nollstations.plus(newStations)
println(twoNumbersArray.joinToString())
println(nolltotalStations.joinToString())
println((numbers + numbers2).joinToString())
println((nollstations + newStations).joinToString())
println(twoNumbersArray.zip(nolltotalStations))
println(twoNumbersArray.zip(nolltotalStations){ s1,s2 -> "$s1" + ":" + s2 }) //[0:嘉定北,-999:徐家汇,100:南翔,33:桃浦新村,-2:徐家汇,3000:上海西站,2:罗山路,3:迪士尼,4:嘉定新城,5:徐家汇,9:桃浦新村,-988:嘉定北,-20:嘉定新城]}
/**
* Mutable可变列表
*/
fun main(args: Array<String>) {
val nollNewsStations = mutableListOf("嘉定北","徐家汇","南翔","桃浦新村","徐家汇","上海西站","罗山路","迪士尼","徐家汇","桃浦新村")
/**
* 往末尾增加新元素:add方法
*/
nollNewsStations.add("嘉定新城")
println(nollNewsStations)//打印:"嘉定北","徐家汇","南翔","桃浦新村","徐家汇","上海西站","罗山路", "迪士尼","徐家汇","桃浦新村","嘉定新城"
/**
* 可以添加另一个List,Array,Set等只要看起来是序列的:addAll方法
*/
nollNewsStations.addAll(nollNewsStations)
println(nollNewsStations)
/**
* 移除一个元素:remove元素
*/
//把第一个匹配的元素从list中移除,如果指定元素不存在,也不会报错
nollNewsStations.remove("嘉定北")
println(nollNewsStations)
/**
* 移除指定位置的元素:removeAt方法
*/
nollNewsStations.removeAt(1)
println(nollNewsStations)
/**
* 替换指定位置的元素:set或下标方法
*/
nollNewsStations.set(0,"南翔")
nollNewsStations[2] = "祁连山路"
println(nollNewsStations)
/**
* 取子列表类似Array的sliceArray方法:subList方法:例如:去第4个~第10个元素
*/
val subStations = nollNewsStations.subList(3,9)
println(subStations)
/**
* 丢弃系列:drop、dropLast、dropLastWhile、dropWhile。用法参考数组
* 不同于remove方法,drop系列方法不会对MutableList本身产生任何影响
*/
/**
* 清空:可以用clear或者removeAll方法
*/
nollNewsStations.clear()
println(nollNewsStations)
nollNewsStations.removeAll(nollNewsStations)
println(nollNewsStations)
}
/**
* Set
*/
fun main(args: Array<String>) {
val mainLine = setOf("迪士尼","徐家汇","桃浦新村","南翔","马陆","嘉定新城")
val sublineJd = setOf("嘉定新城","嘉定西","嘉定北")
val sublineKs = setOf("嘉定新城","上海赛车场","安亭","花桥") //size或count(),isEmpty()、检查是否包含某个元素,contains、转换为数组,toTypedArray()
/**
* Set两大特性:包含关系和Set间的运算关系
* 子集和父集:如果一个集合中所有的元素在另一个集合B中,那么可以称A是B的子集,也就是说B包含A或A包含于B。可以用containsAll方法检查
*/
println(mainLine.containsAll(sublineJd))//false
//两个Set可以用"+"融合成一个
println((mainLine + sublineJd).containsAll(sublineJd))//true
println((mainLine + sublineJd).containsAll(mainLine))//true
/**
* 两个集合间的运算:交集、差集、并集、补集
*/
//交集:在2个集合都包含的元素
println(mainLine.intersect(sublineJd)) //嘉定新城
println(mainLine.intersect(sublineKs)) //嘉定新城
println(sublineJd.intersect(sublineKs))//嘉定新城
//差集:从一个集合中排除与另一个集合交集的部分
println(mainLine.subtract(sublineJd))//[迪士尼,徐家汇,桃浦新村,南翔,马陆]
println(mainLine.subtract(sublineKs))//[迪士尼,徐家汇,桃浦新村,南翔,马陆]
println(mainLine.subtract(sublineKs))//[嘉定西,嘉定北]
//并集:2个集合合并成一个新集合,重复的元素只会留下一份
println(mainLine.union(sublineJd).union(sublineKs))//[迪士尼,徐家汇,桃浦新村,南翔,马陆,嘉定新城,嘉定西,嘉定北,上海赛车场,安亭,花桥]
//补集:并集去除交集后的部分
println(mainLine.union(sublineJd) - mainLine.intersect(sublineJd))//[迪士尼,徐家汇,桃浦新村,南翔,马陆,嘉定西,嘉定北]
println(mainLine.union(sublineKs) - mainLine.intersect(sublineKs))//[迪士尼,徐家汇,桃浦新村,南翔,马陆,上海赛车场,安亭,花桥]
}
/**
* MutableSet * 与MutableList非常相似,特点是大小可变,类型不可变
*/
fun main(args: Array<String>) {
val mainLine = setOf("迪士尼","徐家汇","桃浦新村","南翔","马陆","嘉定新城")
val sublineJd = setOf("嘉定新城","嘉定西","嘉定北")
val sublineKs = setOf("嘉定新城","上海赛车场","安亭","花桥")
val mutableMainline = mainLine.union(sublineJd).union(sublineKs).toMutableSet()
/**
* 在末尾增加元素:add方法
*/
mutableMainline.add("光明路")
println(mutableMainline)
/**
* 添加另一个集合:addAll方法
*/
val newsLines = setOf("昌吉东路","上海汽车城")
mutableMainline.addAll(newsLines)
println(mutableMainline)
/**
* 移除一个元素:remove方法
*/
mutableMainline.remove("光明路")
println(mutableMainline)
/**
* 移除另一个集合:removeAll方法
*/
mutableMainline.removeAll(newsLines)
println(mutableMainline)
}
/**
* Map
*/
fun main(args: Array<String>) {
var airports = mapOf<String,String>(Pair("PVG","上海浦东国际机场"),
Pair("DXB","asdfsdfs"),
Pair("CDG","Aeroport de Paris-Charles-de-Gaulle"),Pair("LAX","Los Angeles International Airport"),
Pair("MUC","FlughafenMunchen"),
Pair("CGH","Aeroporto de Sao Paulo"),
Pair("LHR","London Heathrow Airport"),
Pair("MAD","Aeropuerto Adolfo Suarez,Madrid-Barajas"),
Pair("TPE","桃园国际机场"),
Pair("ICN","思密达"),
Pair("HND","羽田空港"))
/**
* 获取某个key对应的value:get、getOrDefault,或者下标方法
*/
println(airports.get("PVG"))//上海浦东国际机场
println(airports.getOrDefault("PVg","不存在此机场代码或未添加!请检查!"))//不存在此机场
println(airports["LAX"])//Los Angeles International Airport
println(airports["DXB"])//asdfsdfs
/**
* 获取所有的key:keys属性
*/
println(airports.keys)//[PVG,DEB,CDG,LAX,MUC,CGH,LHR,MAD,TPE,ICN,HND]
/**
* 获取所有的value:values属性
*/
println(airports.values)
/**
* 获取所有的条目:entries属性
*/
println(airports.entries)
/**
* 检查key和value存在情况:containsKey和containsValue方法
*/
println(airports.containsKey("PVG")) //true
println(airports.containsValue("Los Angeles Airport"))//false
/**
* 筛选器,filter方法
*/
//筛选机场名中含"Airport"字段的,以筛选出英文国家的机场
println(airports.filter { it.value.contains("Airport") })
//更方便的key、value筛选器:filterKeys、filterValues方法
println(airports.filterValues { it.contains("机场") })
println(airports.filterKeys { it.contains("C") })
/**
* filterNot是filter的变种,把不符合条件的筛选出来
* 变形函数,map方法
* Map的map,听起来有点绕
*/
val newAirportsDescriptionInChinese = airports.map { "机场代码:"+it.key + ",机场全称:"+it.value }
println(newAirportsDescriptionInChinese)
//只对key变形,mapKeys
val newKeyAirports = airports.mapKeys { "机场代码:"+ it.key }
println(newKeyAirports)
//只对value变形,mapValues
val newAirportsNameDescription = airports.mapValues { "机场全称:"+it.value }
println(newAirportsNameDescription)
/**
* 极值函数
*/
//最大值依据,maxBy方法。如求机场全称最长的
println(airports.maxBy { it.value.length })
//最小值依据,minBy方法 如:在现有机场的基础上加上外星传送站
val airportsInfutrue = airports + mapOf<String,String>(Pair("M","月球静海传送站"), Pair("P","冥王星史普尼克爱心区"))
println(airportsInfutrue.minBy { it.key.length })
/**
* 排序:toSortedMap方法,默认按Key来排序
* 按机场代码的字母来升序来排列
*/
println(airportsInfutrue.toSortedMap())
/**
* 转换成其他类型的集合
*/
//toList转换成普通键值对的List
println(airportsInfutrue.toList())
//转换成可变Map、toMutableMap方法
val airports2 = airportsInfutrue.toMutableMap()
println(airports2)
}
/**
* MutableMap
*/
fun main(args: Array<String>) {
var airports = mapOf<String,String>(Pair("PVG","上海浦东国际机场"),
Pair("DXB","asdfsdfs"),
Pair("CDG","Aeroport de Paris-Charles-de-Gaulle"),
Pair("LAX","Los Angeles International Airport"),
Pair("MUC","FlughafenMunchen"),
Pair("CGH","Aeroporto de Sao Paulo"),
Pair("LHR","London Heathrow Airport"),
Pair("MAD","Aeropuerto Adolfo Suarez,Madrid-Barajas"),
Pair("TPE","桃园国际机场"),
Pair("ICN","思密达"),
Pair("HND","羽田空港"))
val airportsInfutrue = airports + mapOf<String,String>(Pair("M","月球静海传送站"),
Pair("P","冥王星史普尼克爱心区"))
val airports2 = airportsInfutrue.toMutableMap()
/**
* 添加或更新
*/
airports2["PVG"] = "上海市浦东国际机场"
airports2["DLC"] = "大连周水子机场"//
airports2.putIfAbsent("MARS","火星奥林匹斯山山麓传送站")
airports2.put("PVG","浦东机场")
/**
* 添加其他Map
* putAll或+=操作符,两者是等价的
*/
val airportsInfuture3 = mapOf<String,String>(Pair("M31","仙女座星系"),
Pair("PROXIMA","比邻星a-1"))
airports2 += airportsInfuture3
println(airports2)
/**
* 移除键值对
* remove方法
*/
airports2.remove("PVG")
println(airports2)
/**
* 清空Map
*/
airports2.clear()
println(airports2)
}
/**
* 集合类型共性详解
*/
fun main(args: Array<String>) {
/**
* 1、集合类型Collection
* (1)Iterable:这是父类,意思是可迭代的、可被重复操作的。任何继承了此接口的类,都意味着实现了一个其中元素可以被迭代的序列
* (2)MutableIterable:支持在迭代过程中移除自身元素的Iterable
* (3)Collection:此类代表了一组元素的通用集合。我们可以通过各种函数来访问集合,如返回集合大小、是否为空、是否包含某个元素或一组元素。所有这些对集合的操作仅仅是请求数据。因为集合类型是不可变的
* (4)MutableCollection:一个支持添加和移除自身元素的Collection,他提供了额外的功能,如:add、remove或clear
* (5)List:代表了一组有序元素的集合,因为有序,可以通过为止请求对应的元素,使用get函数或快捷的下表中括号方法
* (6)MutableList:是一个支持添加和移除元素的list
* (7)Set:一个无序的,但其中元素并不重复的集合
* (8)MutableSet:一个支持添加和删除元素的Set
* (9)Map:键值对的集合。其中的键具有唯一性,也就是说一个map里不能有两个一样的键
* (10)MutableMap:一个支持添加和移除元素的Map
*/
/**
* 2、集合类型的操作
* (1)聚合系
*/
//any:返回true,只要其中一个元素满足判定条件
val list = listOf(1,2,3,4,5,6)
println(list.any { it % 2 == 0 })//true
println(list.any { it > 8 })//false
//all:返回true,如果所有元素满足条件
println(list.all { it < 8 })//true
println(list.all { it % 2 == 0 })//false
//count:返回匹配条件的元素数目
println(list.count { it % 2 == 0 })//3
//fold:提供一个初始值,并描述从第一个到最后一个元素如何依次与这个初始值计算的操作,从而实现累计
println(list.fold(0){total,next -> total + next})//21
println(list.fold(0){total,next -> total * next})//1440
//foldRight:与fold一样,但顺序是从最后一个元素到第一个
println(list.foldRight(2){total,next -> total *next})//1440
//forEach:对每个元素执行指定的操作
list.forEach { print(it) }//123456
//forEachIndexed:与forEach相似,但是可以获取元素的索引
list.forEachIndexed { index, value -> println("位置${index}的值是${value}")}
println(list.max())
println(list.maxBy { -it })
println(list.min())
println(list.minBy { -it })
println(list.none { it % 8 == 0 })
println(list.reduce { total, next -> total + next })
println(list.reduceRight { total, next -> total + next })
println(list.sumBy { it % 2 })
println(list.drop(3))
println(list.dropWhile { it < 3 })
println(list.dropLast(3))
println(list.dropLastWhile { it > 3 })
println(list.filter { it % 2 == 0 })
println(list.filterNot { it % 2 == 0 })
println(list.slice(listOf(0,2,4)))
println(list.slice(0..2))
println(list.take(3))
println(list.takeLast(3))
println(list.takeWhile { it < 3 })
println(list.flatMap { listOf(it,it + 1) })
println(list.groupBy { if (it % 2 == 0) "偶数" else "奇数" })
println(list.map { it * 3 })
println(list.mapIndexed { index, i -> index * i })
println(list.contains(3))
println(list.elementAt(2))
println(list.elementAtOrElse(8){it * 2})
println(list.elementAtOrNull(8))
println(list.first { it % 2 == 0 })
println(list.firstOrNull { it % 8 == 0 })
println(list.indexOf(5))
println(list.indexOfFirst { it % 2 == 0 })
println(list.indexOfLast { it % 2 == 0 })
println(list.last { it % 2 == 0 })
val list2 = listOf(1,1,2,2,3,3,3,4)
println(list2.lastIndexOf(3))
println(list.lastOrNull { it %8 == 0 })
println(list.single { it % 5 == 0 })
println(list.singleOrNull{ it % 2 == 0 })
println(list.partition { it % 2 == 0 })
println(list.zip(listOf(100,101,102)))
println(list.reversed())
val list3 = listOf(3,4,1,0,2)
println(list3.sorted())
println(list.sortedBy { it % 3 })
println(list3.sorted())
println(list.sortedBy { it % 3})
}