代码:

package com.init.demo.collection/**
 * 集合类型Collection
 * Kotlin本身就提供了一组非常良好的原生集合类型接口,分为几下几种;
 *  •  Iterable:这是父类(class),意思是可迭代的、可被重复操作的(这里我们提前讲到类(class),
 *              你现在可以将类理解为函数与变量的组合,
 *              并用了个名字来代表。Iterable就是类名,类可以像基因一样被继承、繁衍而产生多样化的子类)。
 *              任何继承了此接口的类,都意味着实现了一个其中元素可以被选代(重复操作)的序列。
 *  •  Mutablelterable:支持在迭代过程中移除自身元素的lterable。
 *  •  Collection:此类代表了一组元素的通用集合。我们可以通过各种函数来访问集合,
 *                 如返回集合大小、是否为空、是否包含某个元素或一组元素。所有这些对集合的操作仅仅是请求数据,
 *                 因为集合类型是不可变的(immutable)。
 *  •  MutableCollection:一个支持添加和移除自身元素的Collection,它提供了额外的功能,如add、remove或clear等。
 *  •  List: Array主角光环下被掩盖了,其实List也是一样的功能。
 *          没错,虽然用得最多,可就是主角Array的替身,毕竟各种其他编程语言大多以Array为标准名称,
 *          因为是排序了的,我们可以通过位置(索引)请求对应的元素,使用get函数或快捷的下标中括号方法。
 *  •  MutableList:尴尬的是主角Array并没有搭配一个Mutable小老弟。所以MutableList登场了,顾名思义,
 *                 是一个支持添加和移除元素的List。
 *  •  Set:一个无序的,但其中元素并不重复的集合。
 *  •  MutableSet:一个支持添加和删除元素的Set。
 *  •  Map:键值对(Key-valuePair)的集合。
 *     其中的键具有唯一性,也就是说一个map里不能有两个一样的键(key)。
 *  •  MutableMap:一个支持添加和移除元素的Map。
 */
fun main(args: Array<String>) {//聚合系列:any 只要其中一个元素满足判断条件
    val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)println(list.any { it % 2 == 0 })println(list.any { it > 6 })//聚合系列:all 所有元素满足条件
    println(list.all { it % 2 == 0 })println(list.all { it < 6 })//聚合系列:count 返回匹配条件的元素数目
    println(list.count { it % 2 == 0 })//聚合系列:fold 提供一个初始值,并描述第一个到最后一个元素如何依
    // 次与这个初始值计算的操作,从而实现累计
    println(list.fold(0) { total, next -> total + next })println(list.fold(2) { total, next -> total * next })//聚合系列:foldRight 与fold一样,方向相反,从右往左
    println(list.foldRight(2) { total, next -> total * next })//聚合系列:forEach 对每一个元素执行指定的操作
    list.forEach { println(it) }
    //聚合系列:forEachIndexed 对每一个元素执行指定的操作,可以获取元素索引
    list.forEachIndexed { index, i -> println("位置${index}的值是${i}。") }
    //聚合系列:max 获取最大的元素,没有返回null
    println(list.max())//聚合系列:max 获取指定函数操作后产生最大的元素,没有返回null
    println(list.maxBy { -it })//聚合系列:min 获取最小的元素,没有返回null
    println(list.min())//聚合系列:minBy 获取指定函数操作后产生最小的元素,没有返回null
    println(list.minBy { -it })//聚合系列:none 返回true,如果没有元素满足条件,返回false
    println(list.none())println(list.none { it % 2 == 0 })聚合系列:reduce 与fold相似 不需要初始值,并描述第一个到最后一个元素如何依
    //    // 次与这个初始值计算的操作,从而实现累计
    println(list.reduce { total, next -> total + next })println(list.reduce { total, next -> total * next })聚合系列:reduceRight  不需要初始值
    //reduce,方向相反,从右往左
    println(list.reduceRight { total, next -> total * next })//聚合系列:sumBy  返回经过处理过的元素的和
    println(list.sumBy { it % 2 })//筛选系:drop 把头n个元素丢弃后的所有元素返回
    println(list.drop(3))//筛选系:dropWhile 把头n个满足条件元素丢弃后的所有元素返回
    println(list.dropWhile { it < 3 })//筛选系:dropLast 把最后n个元素丢弃后的所有元素返回
    println(list.dropLast(3))//筛选系:dropLastWhile 把把最后n个满足条件元素丢弃后的所有元素返回
    println(list.dropLastWhile { it > 6 })//筛选系:filter 把满足条件元素所有元素返回
    println(list.filter { it % 2 == 0 })//筛选系:filterNot 把不满足条件所有元素返回
    println(list.filterNot { it % 2 == 0 })//筛选系:filterNotNull 把不为空的所有元素返回
    println(list.filterNotNull())//筛选系:slice 切割 按指定索引或索引范围内的元素
    println(list.slice(listOf(1, 2, 4)))println(list.slice(0..2))//筛选系:take 把头n个元素返回
    println(list.take(3))//筛选系:takeWhile 把头n个满足条件元素返回
    println(list.takeWhile { it < 3 })//筛选系:takeLast 把最后n个元素元素返回
    println(list.takeLast(3))//筛选系:dropLastWhile 把把最后n个满足条件元素返回
    println(list.takeLastWhile { it > 6 })//映射系或称变形系:flatMap 跌代集合的所有元素,为每一个元素生成一个新的集合,最后把所有集合摊平合并到一个集合里。
    println(list.flatMap { listOf(it, it + 1) })//映射系或称变形系:groupBy 返回一个按原集合按条件分组的map
    println(list.groupBy { if (it % 2 == 0) "偶数" else "奇数" })//映射系或称变形系:map 返回一个对每一个元素变换后的新集合
    println(list.map { it * 3 })//映射系或称变形系:mapIndexed在map的基础上 引入集合的索引变换使用
    println(list.mapIndexed { index, i -> index * i })
//    println(list.mapNotNull() } // mapNotNull 对所有非null元素进行变化 使用的很少

    //元素操作: contains 找到此元素返回true
    println(list.contains(3))//元素操作: elementAt 返回指定索引处的元素,如果索引不在集合的索引范围内,
    // 则抛出IndexOutOtBoundsException,即索引越界异常错误。
    println(list.elementAt(3))//元素操作: elementAtOrElse 如果索引越界则返回调用函数的结果
    println(list.elementAtOrElse(10) { it * 2 })//元素操作: elementAtOrNull 如果索引越界则返回null
    println(list.elementAtOrNull(10))//元素操作: first{} 返回第一个满足条件的元素
    println(list.first { it % 2 == 0 })//元素操作: firstOrNull 找不到满足条件第一个的元素返回null
    println(list.firstOrNull { it % 10 == 0 })//元素操作: indexOf 返回元素的首个索引,如果元素不存在返回-1
    println(list.indexOf(5))//元素操作: indexOfFirst 返回满足条件的元素的首个索引,如果元素不存在返回-1
    println(list.indexOfFirst { it % 10 == 0 })//元素操作: indexOfLast 返回满足条件的元素的最后一个索引,如果元素不存在返回-1
    println(list.indexOfLast { it % 9 == 0 })//元素操作: last{} 返回最后一个满足条件的元素
    println(list.last { it % 2 == 0 })//元素操作: lastIndexOf 返回元素的最后索引,如果元素不存在返回-1
    println(list.lastIndexOf(5))//元素操作: lastOrNull 找不到满足条件最后一个的元素,找不到元素返回-1
    println(list.lastOrNull { it % 10 == 0 })//元素操作: single 返回满足条件的单元素
    // 如果没找到或找到多个元素满足条件则抛出异常错误
    // llegalArgumentException: Collection contains more than one matching element.
    println(list.single { it % 5 == 0 })//元素操作: singleOrNull 返回满足条件的单元素
    // 如果没找到或找到多个元素满足条件则返回null
    println(list.singleOrNull { it % 2 == 0 })//生成系: partition 集合拆开分成l对集合,第一个集合满足条件,另一个集合是不满足条件的。
    println(list.partition { it % 2 == 0 })//生成系: zip 把两个集合以相同索引顺序进行配对,组成一个新集合。新集合以最短的那个集合索引为准。
    println(list.zip(listOf(100, 101, 102)))//排序系:reversed 返回逆转顺序后的所有元素
    println(list.reversed())//排序系:sorted 返回(升序)排序后的所有元素
    println(list.sorted())//排序系:sortedBy 返回安特定比较器(Comparator)(升序)排序后的所有元素
    println(list.sortedBy { it % 3 == 0 })//排序系:sortedDescending 返回(降序序)排序后的所有元素
    println(list.sortedDescending())//排序系:sortedByDescending返回安特定比较器(Comparator)(降序序)排序后的所有元素
    println(list.sortedByDescending { it % 3 == 0 })
}

输出:

true
true
false
false
4
45
725760
725760
1
2
3
4
5
6
7
8
9
位置0的值是1。
位置1的值是2。
位置2的值是3。
位置3的值是4。
位置4的值是5。
位置5的值是6。
位置6的值是7。
位置7的值是8。
位置8的值是9。
9
1
1
9
false
false
45
362880
362880
5
[4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[2, 4, 6, 8]
[1, 3, 5, 7, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 5]
[1, 2, 3]
[1, 2, 3]
[1, 2]
[7, 8, 9]
[7, 8, 9]
[1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10]
{奇数=[1, 3, 5, 7, 9], 偶数=[2, 4, 6, 8]}
[3, 6, 9, 12, 15, 18, 21, 24, 27]
[0, 2, 6, 12, 20, 30, 42, 56, 72]
true
4
20
null
2
null
4
-1
8
8
4
null
5
null
([2, 4, 6, 8], [1, 3, 5, 7, 9])
[(1, 100), (2, 101), (3, 102)]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 4, 5, 7, 8, 3, 6, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[3, 6, 9, 1, 2, 4, 5, 7, 8]

Kotlin集合—集合类型共性和操作相关推荐

  1. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  2. Kotlin(八)集合List Set Map

    1.在Kotlin中可以通过以下方式创建ArrayList.LinkedList.HashSet.HashMap等. val arrayList = ArrayList<String>() ...

  3. Kotlin学习笔记--Kotlin之集合

    Kotlin学习笔记--Kotlin之集合 集合类 1. List 集合 1.1 不可变list 1.2 可变list MutableList 1.3 集合遍历 1.4 List的操作函数 1.5 l ...

  4. 【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )

    文章目录 一.map 集合定义 二.获取 map 集合类型 三.代码示例 一.map 集合定义 声明键值对 , 其中 键 Key 可以 不使用引号 , 可以 使用单引号 '' , 也可以 使用双引号 ...

  5. 如何在C#中使用反射获取集合元素类型

    目录 介绍 概念化这个混乱 编码此混乱 下载实用程序-5.7 KB 介绍 通过这个技巧,我将努力向读者展示如何使用反射来查询一个集合类的元素类型.当涉及到未实现IEnumerable<T> ...

  6. 12.JAVA编程思想——集合的类型

    12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...

  7. 12 JAVA编程思想——集合的类型

    12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...

  8. JDK8新特性(三):集合之 Stream 流式操作

    1.Stream流由来 首先我们应该知道:Stream流的出现,主要是用在集合的操作上.在我们日常的工作中,经常需要对集合中的元素进行相关操作.诸如:增加.删除.获取元素.遍历. 最典型的就是集合遍历 ...

  9. 怎么回事儿?C#错误:集合已修改;枚举操作可能无法执行。

    本意是遍历表的行,当行中"主键"列为""时,将该行从表中删除.执行时就出现了"集合已修改:枚举操作可能无法执行."的c#错误提示.c#错误代 ...

最新文章

  1. 在Windows应用程序中使用正则表达式
  2. CSS3之利用选择器和content属性在页面中插入内容
  3. 【Linux】crontab 定时任务 遇到几个问题
  4. python 引用和对象理解
  5. 百练OJ:1835:宇航员
  6. MATLAB递归程序的调试方法
  7. win7升级到win10不能上网解决方法
  8. 【spark】示例:连接操作
  9. 用python画出圣诞树_【闲趣】如何用python画出一棵圣诞树
  10. IDEA Mybatis xml中配置sql代码自动提示【必看】
  11. Ubuntu14.04安装PyV8--学习笔记
  12. 新手学习电脑知识的一些方法
  13. html及Dreamweaver学习心得
  14. 中国大学慕课第7周测验
  15. 计算机核心期刊的终审环节,核心期刊终审状态要多久
  16. Zynq-Linux移植学习笔记之34-使用PCS/PMA IP核配置网络
  17. 快速学完计算机网络,如何让电脑网速变快 5分钟就学会
  18. 轻巧的批量图片压缩工具imgfast
  19. 聚焦五大亮点,神策数据 A/B 测试功能全新发布!
  20. 商城网站建设怎么做?这五个技巧告诉你!

热门文章

  1. 华为荣耀3c语言设置在哪个文件夹,(科普)详解Android系统SD卡各类文件夹名称...
  2. AlphabetJS --- 在console或者shell中打印字符图案的小工具
  3. 中国百佳产业集群名单
  4. uniapp离线打包升级SDK(iOS端)
  5. Linux Ubuntu 分区方案
  6. 解除网站变灰的方法,阻止网站变灰的方法,remove grayscale from website
  7. Windows产品密钥
  8. LABjs、RequireJS、SeaJS
  9. 用vscode调试swift,显示The debug type is not recognized.
  10. go编程之常见工具函数