写一篇好懂的常见Kotlin集合函数讲解(后)-灵析社区

德州安卓

zip(Iterable):集合合并

举个例子,有很多玩具,一个集合记录着玩具的id,一个集合记录着玩具的名称,两个集合中相同索引的元素是指同一个玩具,那现在我们觉得两个集合存储麻烦,想要合并成一个集合存储玩具信息,就可以这样实现:

fun zip() {
    val ids = listOf(4, 6, 7)
    val names = listOf("trains", "toe", "airport")
    println(ids.zip(names))
}

输出:[(4, trains), (6, toe), (7, airport)]

associate:将集合转换成Map类型

比如将集合的每个元素作为key,value就是元素的长度转换成map

val names = listOf("trains", "toe", "airport")
println(names.associate {
    it to it.length
})  

//输出:{trains=6, toe=3, airport=7}

其他相似函数:

  • associateWith(value):就等价于associate { 集合元素 to value }
  • associateBy(value):就等价于associate { value to 集合元素 }
  • associateWithTo/associateByTo:相比较于上面的操作函数,就是额外提供了可以将转换结果写入到指定的map对象中
  • chunked(n):将集合分割成一个个长度为n的集合,如果剩余的元素小于n,也单独放到一个集合中
  • val names = listOf("trains", "toe", "airport", "trains", "toe", "airport")
  • println(names.chunked(2))
  • //输出:[[trains, toe], [airport, trains], [toe, airport]]
  • minOf:获取集合中元素权重最小的值,集合为空抛出异常

  • 比如我们获取字符串集合中最短字符串的长度:
  • val names = listOf("trains", "toe", "airport", "trains", "toe", "airport")
  • println(names.minOf { it.length })
  • //输出:3
  • 其他相似函数:
  • minOfOrNull:如果集合长度为0,返回null,否则和minOf相同
  • maxOf:获取集合中元素权重最大的值,集合为空抛出异常

  • 比如我们获取字符串集合中最长字符串的长度:
  • val names = listOf("trains", "toe", "airport", "trains", "toe", "airport")
  • println(names.maxOf { it.length })
  • //输出:7
  • 其他相似函数:
  • maxOfOrNull:如果集合长度为0,返回null,否则和maxOf相同
  • sortedWith:集合排序

    排序很简单,我们只需要传入比较器即可,但jdk1.7以后对于排序的规则有所变化,要求排序的规则必须满足:

    自反性:元素a和元素b的比较的结果r1和元素b和元素a的比较的结果r2要满足:r1 == -r2

    举个例子我们平常排序很容易写出下面错误的排序规则:

    names.sortedWith(Comparator { a, b ->
     if (a > b) 1 else -1
    })

    如果元素a和元素b相等,那么a和b比较结果为-1,b和a比较结果也为-1,此时就不满足自反性的规则,直接崩溃

    • 传递性:元素a大于元素b,元素b大于元素c,那么元素a也应该大于元素c
    • 对称性:元素a等于元素b,那么元素a和元素c比较的结果值应该等于元素b和元素c比较的结果值
      其他类似排序函数:
    • sortedBy:为了避免程序写出的比较器不符合上面规则,直接传入元素要比较的值即可
    • sortedByDescending:和sortedBy相比,降序排序
  • 阅读量:901

    点赞量:0

    收藏量:0